Ich möchte eine Reihe von Objekten vereinfachen. Nehmen wir an, ich habe folgendes 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'
}];
Und Filterobjekt:
var filter = {address: 'England', name: 'Mark'};
Zum Beispiel muss ich alle Benutzer nach Adresse und Name filtern, damit ich die Eigenschaften des Filterobjekts durchlaufe und es auschecke:
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;
}
Während der ersten Iteration, wenn prop - address
gleich ist, werden 'England'
zwei Benutzer zum Array-Ergebnis hinzugefügt (mit dem Namen Tom und Mark), aber bei der zweiten Iteration, wenn prop name
gleich ist, sollte Mark
nur der letzte Benutzer zum Array-Ergebnis hinzugefügt werden, aber am Ende habe ich zwei Elemente im Array.
Ich habe eine kleine Vorstellung davon, warum es passiert, bin aber immer noch dabei geblieben und konnte keine gute Lösung finden, um das Problem zu beheben. Jede Hilfe ist spürbar. Vielen Dank.