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 :
Object.filter = (obj, predicate) => Object.keys(obj) .filter((key) => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {});
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); };
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!