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
Libérer: 2024-11-27 11:47:11
original
539 Les gens l'ont consulté

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;
};
Copier après la connexion

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), {});
Copier après la connexion
  • 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);
};
Copier après la connexion
  • Utilisation Object.entries et Object.fromEntries :
Object.filter = (obj, predicate) => {
    const filteredEntries = Object.entries(obj).filter(
        ([key, value]) => predicate(value)
    );

    return Object.fromEntries(filteredEntries);
};
Copier après la connexion

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 }
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal