JavaScript: Filter() für Objekte implementieren
JavaScript stellt den filter()-Prototyp für Array-Typen bereit, diese Funktionalität fehlt jedoch für Object Typen. Um diese Einschränkung zu beheben, untersuchen wir, wie Sie eine filter()-Implementierung speziell für Objekte erstellen.
Implementierung:
Object.prototype.filter = function(predicate) { var result = {}; for (key in this) { if (this.hasOwnProperty(key) && !predicate(this[key])) { result[key] = this[key]; } } return result; };
Während diese Implementierung isoliert funktioniert, fügt das Hinzufügen hinzu Wenn Sie es auf eine Website mit jQuery 1.5 und jQuery UI 1.8.9 übertragen, kann dies zu JavaScript-Fehlern führen.
Alternative Lösungen:
Anstatt den Objektprototyp zu ändern, ziehen Sie diese eigenständigen oder Hilfsfunktionen in Betracht:
1. Verwenden von Reduce und Object.keys:
Object.filter = (obj, predicate) => Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {});
2. Verwendung der Map- und Spread-Syntax:
Object.filter = (obj, predicate) => Object.entries(obj) .filter(([key, value]) => predicate(value)) .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
3. Verwendung von Object.entries und Object.fromEntries:
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) );
Beispielverwendung:
var scores = { John: 2, Sarah: 3, Janet: 1 }; var filtered = Object.filter(scores, score => score > 1); console.log(filtered);
Diese alternativen Lösungen bieten eine sauberere und wartbarere Möglichkeit Objekteigenschaften filtern und dabei das Originalobjekt beibehalten.
Das obige ist der detaillierte Inhalt vonWie können Sie eine „filter()'-Methode für JavaScript-Objekte implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!