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
Barbara StreisandOriginal
2024-11-27 11:47:11549Durchsuche

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;
};

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), {});
  • 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);
};
  • 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);
};

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!

Stellungnahme:
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