Maison >interface Web >js tutoriel >Comment filtrer les objets JavaScript sans modifier le prototype natif ?

Comment filtrer les objets JavaScript sans modifier le prototype natif ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 11:47:11634parcourir

How to Filter JavaScript Objects Without Modifying the Native Prototype?

Filtrage d'objets en JavaScript à l'aide de l'extension de prototype

ECMAScript 5 a introduit la méthode filter() pour les types Array, mais pas pour les types Object. Cela soulève la question de savoir comment implémenter une méthode filter() pour les objets en JavaScript.

Implémentation de filtre d'objet personnalisé

Une approche consiste à étendre le Object.prototype avec une méthode filter() personnalisée :

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

Cette implémentation utilise une boucle pour parcourir les propres propriétés de l'objet et vérifie si la fonction de prédicat renvoie vrai ou false pour chaque valeur. Si faux, la paire clé-valeur est ajoutée à l'objet résultat.

Cependant, l'extension du Object.prototype natif est considérée comme une mauvaise pratique, car elle peut entraîner des conflits avec d'autres bibliothèques ou du code.

Approches alternatives

Au lieu d'étendre Object.prototype, il existe plusieurs approches alternatives pour filtrer les objets dans JavaScript :

  • Utilisation de réduire et Object.keys:
Object.filter = (obj, predicate) =>
    Object.keys(obj)
        .filter((key) => predicate(obj[key]))
        .reduce((res, key) => (res[key] = obj[key], res), {});
  • Utilisation de la syntaxe map et spread :
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);
};
  • Utilisation Object.entries et Object.fromEntries :
Object.filter = (obj, predicate) => {
    const filteredEntries = Object.entries(obj).filter(
        ([key, value]) => predicate(value)
    );

    return Object.fromEntries(filteredEntries);
};

Exemple d'utilisation

Filtrons un objet en utilisant l'une de ces approches alternatives :

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 }

En utilisant ces méthodes alternatives, vous pouvez filtrer les objets en JavaScript sans étendre le natif prototype.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn