Jee*_*van 0 arrays underscore.js lodash
我有这样的对象数组
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' }
];
Run Code Online (Sandbox Code Playgroud)
我想过滤公司是abc或xyz的对象数组,所以结果应该是这样的
[
{ 'user': 'barney', 'age': 36, 'active': true , 'company':'abc' },
{ 'user': 'pebbles', 'age': 1, 'active': true, 'company':'xyz' }
];
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的装载
console.log(_.filter(users, {'company': 'xyz','company': 'abc'}))
Run Code Online (Sandbox Code Playgroud)
它没有正确过滤.任何人都可以帮我这个.
只需使用默认语法,这应该工作
_.filter(users, function(user) { return user.company == 'abc' || user.company == 'xyz'; });
Run Code Online (Sandbox Code Playgroud)
您的代码首先不起作用的简短原因
_.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
Run Code Online (Sandbox Code Playgroud)
这导致只有巴尼被退回.
| 归档时间: |
|
| 查看次数: |
1158 次 |
| 最近记录: |