2015-10-02 117 views
1

考慮以下數組對象:對象數組過濾對多個屬性隨着underscore.js

var files = [{ 
    name: "test1", 
    size: 123 
}, { 
    name: "test1", 
    size: 456 
}, { 
    name: "test2", 
    size: 789 
}] 

如果我想要一個新的數組沒有名爲「測試1」和大小對象123以下是有道理的對我來說:

_.filter(files, function(_file) { 
    return _file.name !== "test1" && _file.size !== 123; 
}); 

但是;這總是刪除名稱爲「test1」的兩個項目。以下內容返回所需結果:

_.filter(files, function(_file) { 
    return _file.name !== "test1" || _file.size !== 123; 
}); 

怎麼回事?

回答

1

你的實際情況,應該已經

return !(_file.name === "test1" && _file.size === 123); 

,因爲你有拒絕的項目僅在這兩個屬性相匹配的具體數值,而不是當任何屬性不匹配的特定值。

在您的代碼中,對於第二個元素,_file.name !== "test1"實際上是false,整個表達式將變爲false,因此第二項也會被跳過。

相關問題