Problem:
Gegeben ein Array von Objekten und ein Filter Ziel ist es, die Array-Elemente basierend auf mehreren im Filterobjekt angegebenen Bedingungen zu filtern. Bei einer aktuellen Implementierung tritt jedoch ein Problem auf, bei dem mehrere Elemente, die nur eine Teilmenge der Bedingungen erfüllen, im Ergebnis enthalten sind.
Lösung:
Das Problem entsteht durch die falsche Verwendung der for (var i = 0; i < filter.length; i )-Schleife innerhalb der Filterfunktion. Da es sich bei Filter um ein Objekt handelt, verfügt es nicht über eine Längeneigenschaft und diese Schleife wird überflüssig.
Um dieses Problem zu beheben, können wir direkt über die Eigenschaften des Filterobjekts iterieren und für jedes Benutzerobjekt prüfen, ob eine Eigenschaft vorhanden ist . Der folgende Code demonstriert die korrekte Implementierung:
<code class="javascript">function filterUsers(users, filter) { var result = []; for (var prop in filter) { if (filter.hasOwnProperty(prop)) { users.forEach(function(user) { if (user[prop] === filter[prop]) { result.push(user); } }); } } return result; }</code>
Verbesserte Filterfunktion:
Die verbesserte filterUsers-Funktion iteriert jetzt über die Benutzer und überprüft jede Eigenschaft des Filterobjekts um zu sehen, ob es mit dem entsprechenden Eigenschaftswert des Benutzers übereinstimmt. Nur Benutzer mit übereinstimmenden Werten für alle angegebenen Eigenschaften werden in das Ergebnis einbezogen.
Beispiel:
<code class="javascript">var filter = { address: 'England', name: 'Mark', }; var users = [{ name: 'John', email: 'john@example.com', age: 25, address: 'USA', }, { name: 'Tom', email: 'tom@example.com', age: 35, address: 'England', }, { name: 'Mark', email: 'mark@example.com', age: 28, address: 'England', }, ]; var filteredUsers = filterUsers(users, filter); console.log(filteredUsers); // Output: [{ // name: 'Mark', // email: 'mark@example.com', // age: 28, // address: 'England', // }]</code>
Diese Implementierung stellt sicher, dass nur der Benutzer, dessen Name Mark und ist wer in England lebt, wird gemäß den Filterbedingungen in das Ergebnis einbezogen.
Das obige ist der detaillierte Inhalt vonWie filtere ich ein Array von Objekten basierend auf mehreren Bedingungen in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!