2017-02-20 100 views
-1

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

+1

请阅读[问]。重要短语:“搜索和研究”和“解释......阻止你自己解决它的任何困难”。 –

回答

2

这是可能的使用Array.prototype.filter()?

是的,但不是直接:您可以使用Object.keys或类似的后做到这一点:

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

结果是truthy值的数组。

如果你想最终的结果是一个对象,与reduce结合filter可以做到这一点:

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

这大多只是使用reduce为一个循环构造(因为我们从来没有真正改变累加器值,我们只是不断返回相同的对象),这有时被认为是“滥用”。 :-)这也意味着我们可以做无filter部分,只是把一个ifreduce,但是......


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

+0

我们有一个小小的争论,我期待着您的意见在这种情况下。谁有权利?谁的答案是完全错误的?如果你可以说些什么... http://stackoverflow.com/questions/42356481/how-to-get-the-last-key-of-object-which-has-a-value/42356557 –