ES6 - 根据 True 值过滤对象

3

我有一个对象,其中包含一些布尔值,如下所示:

{ date: "2017-10-05", name_change: false, age_change: true, ... }

我希望可以筛选出那些键值是true的内容,同时我也需要日期值,如何使用filter

谢谢。


这不是重复的! - Adel
那么您需要更好地解释您的问题,因为它目前看起来很像一个重复的问题。 - The Archetypal Paul
1
@TheArchetypalPaul - 他正在过滤对象的属性,而不是数组中的对象。 - Ori Drori
@OriDrori,好的,这是一个可能的解释,但考虑到他还说他想要使用filter(),并不是唯一的解释。无论哪种情况,编辑以澄清问题会比仅仅声明它不是重复问题更好。 - The Archetypal Paul
1
这仍然是一个不同的问题的重复:https://stackoverflow.com/questions/44439907/filtering-out-specific-keys-in-an-object,并且在此 https://dev59.com/tlsW5IYBdhLWcg3wHUKb(以及可能其他)中也有答案。 - The Archetypal Paul
1个回答

5
使用Object.entries()将对象转换为[key, value]元组的数组。通过检查值是否为true来过滤元组。然后使用Object.fromEntries()将其转换回对象:

const obj = { 
  date: "2017-10-05", 
  name_change: false, 
  age_change: true 
};

const result = Object.fromEntries(
  Object
    .entries(obj)
    .filter(([, val]) => val !== true)
);

console.log(result);

旧答案:

使用 Object#keys 获取键,然后使用 Array#reduce 迭代键数组,并构建一个新对象,该对象不包含值等于 true 的键:

const obj = { 
  date: "2017-10-05", 
  name_change: false, 
  age_change: true 
};

const result = Object.keys(obj)
  .reduce((o, key) => {
    obj[key] !== true && (o[key] = obj[key]);

    return o;
  }, {});

console.log(result);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接