Я хочу упростить массив объектов. Предположим, что у меня есть следующий массив:
var users = [{
name: 'John',
email: '[email protected]',
age: 25,
address: 'USA'
},
{
name: 'Tom',
email: '[email protected]',
age: 35,
address: 'England'
},
{
name: 'Mark',
email: '[email protected]',
age: 28,
address: 'England'
}];
И объект фильтра:
var filter = {address: 'England', name: 'Mark'};
Например, мне нужно отфильтровать всех пользователей по адресу и имени, поэтому я прохожу через свойства объекта фильтра и проверяю его:
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
, только последний пользователь должен быть добавлен к результату массива, но в итоге я получаю два элемента в массиве.
У меня есть небольшая идея, почему это происходит, но все еще застрял на ней и не нашел хорошего решения для ее устранения. Любая помощь заметна. Спасибо.