【问题标题】:Using filter on an object在对象上使用过滤器
【发布时间】:2017-02-20 22:12:17
【问题描述】:

我有一个只包含简单键值对的对象,我想过滤掉任何具有虚假值的属性。这可以使用 Array.prototype.filter() 吗?

【问题讨论】:

  • 请阅读How to Ask。关键词:“搜索和研究”和“解释......任何阻碍你自己解决的困难”。

标签: javascript functional-programming


【解决方案1】:

这可以使用 Array.prototype.filter() 吗?

可以,但不能直接使用:您可以在使用 Object.keys 或类似名称后进行:

var arrayOfTruthyValues = Object.keys(obj).filter(key => obj[key]);

结果是一组真值。

如果您希望最终结果是一个对象,将filterreduce 结合即可:

var newObj = Object.keys(obj)
    .filter(key => obj[key])
    .reduce((newObj, key) => {
        newObj[key] = obj[key];
        return newObj;
     }, {});

这主要是使用reduce 作为循环构造(因为我们从未真正更改累加器值,我们只是不断返回相同的对象),这有时被认为是“滥用”。 :-) 这意味着我们可以不使用filter 部分,只需在reduce 中添加一个if,但是...


请注意,Object.keys 仅包含对象的自己的可枚举 属性。如果您想要拥有自己的属性,即使它们不可枚举,那也可能是 Object.getOwnPropertyNames

【讨论】:

猜你喜欢
  • 2018-02-03
  • 2018-12-14
  • 2021-09-24
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多