Я хочу упростить массив объектов. Давайте предположим, что у меня есть следующий массив:javascript filter array multiple conditions
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'
два пользователи будут добавлены в результате массив (с именем Тома и Марка), но на второй итерации, когда prop name
будет равен Mark
, только последний пользователь должен быть добавлен к результату массива, но в итоге я получаю два элемента в массиве.
У меня есть небольшая идея, почему это происходит, но все еще застряло на ней и не может найти хорошее решение для ее устранения. Любая помощь заметна. Благодарю.
почему вам цикл через пользователей в 2 раза? – webduvet