Javascript 如何使用Lodash过滤器过滤多个条件?
我想从集合中筛选两个obj,即conditionArr从服务器获取,因此这是不可预测的 我的代码是:Javascript 如何使用Lodash过滤器过滤多个条件?,javascript,filter,lodash,Javascript,Filter,Lodash,我想从集合中筛选两个obj,即conditionArr从服务器获取,因此这是不可预测的 我的代码是: var users = [{ user: 'barney', age: 36, active: true }, { user: 'fred', age: 40, active: false }, { user: 'travis', age
var users = [{
user: 'barney',
age: 36,
active: true
},
{
user: 'fred',
age: 40,
active: false
},
{
user: 'travis',
age: 37,
active: true
}
];
// the Array fetch from Server, so it's unpredictable.
var conditionArr = [{
user: 'barney'
}, {
user: 'fred'
}];
// _.filter
result = _.filter(users, conditionArr);
// expect results:
[{
user: 'barney',
age: 36,
active: true
},
{
user: 'fred',
age: 40,
active: false
}
]
[]
我的预期输出:
var users = [{
user: 'barney',
age: 36,
active: true
},
{
user: 'fred',
age: 40,
active: false
},
{
user: 'travis',
age: 37,
active: true
}
];
// the Array fetch from Server, so it's unpredictable.
var conditionArr = [{
user: 'barney'
}, {
user: 'fred'
}];
// _.filter
result = _.filter(users, conditionArr);
// expect results:
[{
user: 'barney',
age: 36,
active: true
},
{
user: 'fred',
age: 40,
active: false
}
]
[]
实际结果:
var users = [{
user: 'barney',
age: 36,
active: true
},
{
user: 'fred',
age: 40,
active: false
},
{
user: 'travis',
age: 37,
active: true
}
];
// the Array fetch from Server, so it's unpredictable.
var conditionArr = [{
user: 'barney'
}, {
user: 'fred'
}];
// _.filter
result = _.filter(users, conditionArr);
// expect results:
[{
user: 'barney',
age: 36,
active: true
},
{
user: 'fred',
age: 40,
active: false
}
]
[]
thx
我找到了一个更好的方法:
result = _.map(conditionArr, (con) => ({
...con,
...(_.find(users, { user: con.user })),
}))
thx…只需使用array.filter:
var用户=[
{用户:'barney',年龄:36岁,活动:true},
{用户:'fred',年龄:40,活动:false},
{用户:'travis',年龄:37岁,活动状态:true}
];
var result=users.filter(({user})=>user=='barney'| | user=='fred');
控制台日志(结果)
如果必须使用lodash来实现这一点,您可以使用与array.filter相同的方法来实现
_.filter(users, ({user}) => user === 'barney' || user === 'fred');
在方法中,您需要像下面的示例一样传递函数
_.filter(users, function(o) { return !o.active; });
var用户=[{
用户:“barney”,
年龄:36岁,
主动:正确
},
{
用户:“fred”,
年龄:40,,
活动:错误
},
{
用户:“travis”,
年龄:37岁,
主动:正确
}
];
//_u.过滤器
var result=u.filter(用户,函数(obj){return obj.user=='barney'| | obj.user=='fred'});
console.log(结果)
像使用本地js一样-
let userSubset = users.map(function(obj, index) {
if (obj.user === "barney" || obj.user === "fred") return obj;
}).filter(Boolean);
console.log(userSubset);
// {user: "barney", age: 36, active: true}
// {user: "fred", age: 40, active: false}
使用:
const users=[{“user”:“barney”,“age”:36,“active”:true},{“user”:“fred”,“age”:40,“active”:false},{“user”:“travis”,“age”:37,“active”:true});
const conditionArr=[{“user”:“barney”},{“user”:“fred”}];
const result=u.intersectionBy(用户,条件arr,'user');
控制台日志(结果)代码>
与许多其他lodash函数一样,filter将函数作为第二个参数(数组中的每个元素都作为参数),如果函数返回true,则该元素将保留在结果中
var用户=[
{用户:'barney',年龄:36岁,活动:true},
{用户:'fred',年龄:40,活动:false},
{用户:'travis',年龄:37岁,活动状态:true}
];
//阵列从服务器获取,因此不可预测。
变量条件arr=[
{用户:'barney'},
{用户:'fred'}
];
//简化了一点条件。cond=['barney','fred'];
var cond=uu.map(conditionArr,cond=>cond.user);
//_u.过滤器
var result=\.filter(用户,用户=>\.indexOf(cond,用户,用户)!=-1);
console.log('result',result)代码>
非常酷!不幸的是,我的lodash版本太旧了。但我会看看我是否可以基于此编写自己的函数@Sampgun-我在答案中添加了一个ES6intersectionBy
。酷!实际上我也不能用ES6