Я хочу спростити масив об'єктів. Припустимо, що у мене є такий масив:
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'};
Наприклад, мені потрібно відфільтрувати всіх користувачів за адресою та іменем, тому я перебираю властивості об'єкта фільтра та перевіряю це:
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
до результату масиву повинен бути доданий лише останній користувач, але в підсумку я отримую двох елементи в масиві.
Я трохи зрозумів, чому це відбувається, але все ще затримався на цьому і не міг знайти хорошого рішення, щоб це виправити. Будь-яка допомога помітна. Дякую.