我有像这样的对象数组
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' }
];
我正在使用像这样的装载
console.log(_.filter(users, {'company': 'xyz','company': 'abc'}))
未正确过滤。任何人都可以帮助我。
答案 0 :(得分:5)
只需使用默认语法,这应该可以正常工作
_.filter(users, function(user) { return user.company == 'abc' || user.company == 'xyz'; });
您的代码首先无法正常工作的简短原因
_.filter(users, {'company': 'xyz','company': 'abc'})
是因为您传递的是具有重复属性名称company
的javascript对象,因此值为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。