2016-06-15 182 views
0

我有對象的數組這樣如何對象數組過濾

var users = [ 
    { 'user': 'barney', 'age': 36, 'active': true , 'company':'abc' }, 
    { 'user': 'fred', 'age': 40, 'active': false, 'company':'pqr' }, 
    { 'user': 'pebbles', 'age': 1, 'active': true, 'company':'xyz' } 
]; 

我想過濾對象的數組,其中公司ABC或XYZ所以結果應該是這樣的

[ 
    { 'user': 'barney', 'age': 36, 'active': true , 'company':'abc' }, 
    { 'user': 'pebbles', 'age': 1, 'active': true, 'company':'xyz' } 
]; 

我使用loadash這樣

console.log(_.filter(users, {'company': 'xyz','company': 'abc'})) 

它沒有正確過濾。任何人都可以幫助我解決這個問題。

+0

可能重複[lodash過濾器集合使用值數組](http://stackoverflow.com/questions/17251764/lodash-filter-collection-using-array-of-values) – Andreas

+0

嗨,我的答案是否解決您的問題題? – Quannt

回答

5

只使用默認的語法,這應該工作

_.filter(users, function(user) { return user.company == 'abc' || user.company == 'xyz'; }); 

短的原因,你的代碼沒有擺在首位

_.filter(users, {'company': 'xyz','company': 'abc'})

的工作,因爲你是一個合格的javascript帶有重複屬性名稱的對象company因此,值爲abc的第二個屬性將覆蓋第一個屬性。這意味着你實際上在做這個

_.filter(users, {'company': 'abc'})

該對象,然後{'company': 'abc'}將被傳遞到_.matches產生一個函數,這個函數會再驗證數組中的每個元素。

var predicate = _.matches({'company': 'abc'}); 
    predicate({ 'user': 'barney', 'age': 36, 'active': true , 'company':'abc' }); // true 
    predicate( { 'user': 'fred', 'age': 40, 'active': false, 'company':'pqr' }); // false 
    predicate( { 'user': 'pebbles', 'age': 1, 'active': true, 'company':'xyz' }); // false 

哪個結果只返回barney。