JavaScript : Implémentation de filter() pour les objets
JavaScript fournit le prototype filter() pour les types Array, mais cette fonctionnalité est absente pour Object genres. Pour résoudre cette limitation, explorons comment créer une implémentation filter() spécifiquement pour les objets.
Implémentation :
Object.prototype.filter = function(predicate) { var result = {}; for (key in this) { if (this.hasOwnProperty(key) && !predicate(this[key])) { result[key] = this[key]; } } return result; };
Bien que cette implémentation fonctionne de manière isolée, en ajoutant sur un site utilisant jQuery 1.5 et jQuery UI 1.8.9 peut déclencher des erreurs JavaScript.
Solutions alternatives :
Au lieu de modifier le prototype d'objet, envisagez ces solutions autonomes ou fonctions utilitaires :
1. 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), {});
2. Utilisation de la syntaxe de carte et de propagation :
Object.filter = (obj, predicate) => Object.entries(obj) .filter(([key, value]) => predicate(value)) .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
3. Utilisation d'Object.entries et d'Object.fromEntries :
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) );
Exemple d'utilisation :
var scores = { John: 2, Sarah: 3, Janet: 1 }; var filtered = Object.filter(scores, score => score > 1); console.log(filtered);
Ces solutions alternatives offrent un moyen plus propre et plus maintenable de filtrer les propriétés de l'objet tout en préservant l'objet d'origine.
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!