在对象上使用过滤器

时间:2017-02-20 22:12:18

标签: javascript functional-programming

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

1 个答案:

答案 0 :(得分:2)

  

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

是,但不是直接:您可以在使用var arrayOfTruthyValues = Object.keys(obj).filter(key => obj[key]); 或类似内容后执行此操作:

filter

结果是一系列真值。

如果您希望最终结果是对象,将reducevar newObj = Object.keys(obj) .filter(key => obj[key]) .reduce((newObj, key) => { newObj[key] = obj[key]; return newObj; }, {}); 合并可以做到:

reduce

这主要只是使用filter作为循环结构(因为我们实际上从未改变累加器值,我们只是继续返回相同的对象),这有时被认为是“滥用”。 :-)这意味着我们可以在没有if部分的情况下完成,只需在reduce中添加Object.keys,但是......

请注意,Object.getOwnPropertyNames仅包含对象的拥有可枚举属性。如果您想要自己的属性,即使它们不可枚举,也可能是String fileName = "20170123-100046_20170217154436_A20170217210502"; fileName = filename.Substring(filename.IndexOf("_") + 1); string fname; fname=fileName.Substring(0, fileName .IndexOf("_"))