Heim >Web-Frontend >js-Tutorial >Wie filtere ich JavaScript-Objekte, ohne den nativen Prototyp zu ändern?
Objektfilterung in JavaScript mithilfe der Prototype-Erweiterung
ECMAScript 5 führte die filter()-Methode für Array-Typen ein, jedoch nicht für Objekttypen. Dies wirft die Frage auf, wie man eine filter()-Methode für Objekte in JavaScript implementiert.
Benutzerdefinierte Objektfilterimplementierung
Ein Ansatz besteht darin, den Object.prototype um zu erweitern eine benutzerdefinierte filter()-Methode:
Object.prototype.filter = function (predicate) { var result = {}; for (var key in this) { if (this.hasOwnProperty(key) && !predicate(this[key])) { result[key] = this[key]; } } return result; };
Diese Implementierung verwendet eine Schleife, um die eigenen Eigenschaften des Objekts zu durchlaufen und zu prüfen, ob die Prädikatfunktion „true“ oder „true“ zurückgibt false für jeden Wert. Bei „false“ wird das Schlüssel-Wert-Paar zum Ergebnisobjekt hinzugefügt.
Das Erweitern des nativen Object.prototype gilt jedoch als schlechte Praxis, da es zu Konflikten mit anderen Bibliotheken oder Code führen kann.
Alternative Ansätze
Anstatt Object.prototype zu erweitern, gibt es mehrere alternative Ansätze zum Filtern von Objekten JavaScript:
Object.filter = (obj, predicate) => Object.keys(obj) .filter((key) => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {});
Object.filter = (obj, predicate) => { const filteredValues = Object.keys(obj).map((key) => { if (predicate(obj[key])) { return [key, obj[key]]; } }).filter(Boolean); return Object.fromEntries(filteredValues); };
Object.filter = (obj, predicate) => { const filteredEntries = Object.entries(obj).filter( ([key, value]) => predicate(value) ); return Object.fromEntries(filteredEntries); };
Beispielverwendung
Lassen Sie uns ein Objekt mit einem dieser Filter filtern alternative Ansätze:
const scores = { John: 2, Sarah: 3, Janet: 1 }; // Using the `reduce` and `Object.keys` approach: const filteredScores = Object.filter(scores, (score) => score > 1); console.log(filteredScores); // { Sarah: 3 }
Durch die Verwendung dieser alternativen Methoden können Sie Objekte in JavaScript filtern, ohne den nativen Prototyp zu erweitern.
Das obige ist der detaillierte Inhalt vonWie filtere ich JavaScript-Objekte, ohne den nativen Prototyp zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!