Heim > Web-Frontend > js-Tutorial > Wie filtere ich JavaScript-Objekte, ohne den nativen Prototyp zu ändern?

Wie filtere ich JavaScript-Objekte, ohne den nativen Prototyp zu ändern?

Barbara Streisand
Freigeben: 2024-11-27 11:47:11
Original
548 Leute haben es durchsucht

How to Filter JavaScript Objects Without Modifying the Native Prototype?

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;
};
Nach dem Login kopieren

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:

  • 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), {});
Nach dem Login kopieren
  • Verwenden von Map und Spread Syntax:
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);
};
Nach dem Login kopieren
  • Verwendung von Object.entries und Object.fromEntries:
Object.filter = (obj, predicate) => {
    const filteredEntries = Object.entries(obj).filter(
        ([key, value]) => predicate(value)
    );

    return Object.fromEntries(filteredEntries);
};
Nach dem Login kopieren

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 }
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage