2017-02-20 141 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 –