我已经检查了other answers,但它指的是范围。
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'Avding', 'age': 34, 'active': true }
];
_.filter(...)
我希望基于多个值进行过滤,因此在上面的示例中,我想执行以下操作:
_.filter(users, { 'age': [36, 40], 'user': ['barney', 'Avding'] });
预期的结果将是Barney,因为Avding既不存在36岁也不是40岁。
答案 0 :(得分:2)
您可以声明自己的过滤器功能。
_.filter(users, function (o) {
return (o.age === 36 || o.age === 40) && (o.user === 'barney' || o.user === 'Avding');
});
无需为每个年龄或姓名创建单个比较:
var ages= [36, 40]
var users = ['barney', 'Avding']
_.filter(users, function (o) {
return ages.includes(o.age) && users.includes(o.user);
});
答案 1 :(得分:1)
如果不使用lodash
,则可以使用filter
遍历数组。使用every
检查是否所有检查参数。使用includes
检查数组中是否存在元素。
并使用Object.entries
将对象转换为数组。
var users = [{"user":"barney","age":36,"active":true},{"user":"fred","age":40,"active":false},{"user":"Avding","age":34,"active":true}];
var search = Object.entries({'age': [36, 40],'user': ['barney', 'Avding']});
var result = users.filter(o => search.every(([k, v]) => v.includes(o[k])));
console.log(result);