javascript过滤数组多个条件 [英] javascript filter array multiple conditions
问题描述
我想简化一组对象.假设我有以下数组:
I want to simplify an array of objects. Let's assume that I have following array:
var users = [{
name: 'John',
email: 'johnson@mail.com',
age: 25,
address: 'USA'
},
{
name: 'Tom',
email: 'tom@mail.com',
age: 35,
address: 'England'
},
{
name: 'Mark',
email: 'mark@mail.com',
age: 28,
address: 'England'
}];
和过滤器对象:
var filter = {address: 'England', name: 'Mark'};
例如我需要按地址和姓名过滤所有用户,所以我循环过滤器对象属性并检查它:
For example i need to filter all users by address and name, so i do loop through filter object properties and check it out:
function filterUsers (users, filter) {
var result = [];
for (var prop in filter) {
if (filter.hasOwnProperty(prop)) {
//at the first iteration prop will be address
for (var i = 0; i < filter.length; i++) {
if (users[i][prop] === filter[prop]) {
result.push(users[i]);
}
}
}
}
return result;
}
所以在第一次迭代时,当 prop - address
将等于 'England'
两个用户将被添加到数组结果(名称为 Tom 和 Mark),但在当 prop name
等于 Mark
时,第二次迭代只应将最后一个用户添加到数组结果中,但我最终在数组中有两个元素.
So during first iteration when prop - address
will be equal 'England'
two users will be added to array result (with name Tom and Mark), but on the second iteration when prop name
will be equal Mark
only the last user should be added to array result, but i end up with two elements in array.
我知道为什么会发生这种情况,但仍然坚持下去,找不到解决它的好方法.任何帮助都是可观的.谢谢.
I have got a little idea as why is it happening but still stuck on it and could not find a good solution to fix it. Any help is appreciable. Thanks.
推荐答案
你可以这样做
var filter = {
address: 'England',
name: 'Mark'
};
var users = [{
name: 'John',
email: 'johnson@mail.com',
age: 25,
address: 'USA'
},
{
name: 'Tom',
email: 'tom@mail.com',
age: 35,
address: 'England'
},
{
name: 'Mark',
email: 'mark@mail.com',
age: 28,
address: 'England'
}
];
users= users.filter(function(item) {
for (var key in filter) {
if (item[key] === undefined || item[key] != filter[key])
return false;
}
return true;
});
console.log(users)
这篇关于javascript过滤数组多个条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!