Maison >interface Web >js tutoriel >Comment implémenter une méthode `filter()` personnalisée pour les objets en JavaScript ?
JavaScript : implémentation d'une méthode filter() personnalisée pour les objets
La spécification ECMAScript 5 introduit le prototype filter() pour les tableaux, mais pas pour les objets. L'extension des objets intégrés de JavaScript est généralement déconseillée. Cependant, si vous le souhaitez, vous pouvez créer une fonctionnalité filter() personnalisée pour les objets en utilisant les approches suivantes :
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), {}); // Example: const scores = { John: 2, Sarah: 3, Janet: 1 }; const filtered = Object.filter(scores, score => score > 1); console.log(filtered);
2. Utilisation de réduire() et Object.keys() avec Object.assign()
Object.filter = (obj, predicate) => Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => Object.assign(res, { [key]: obj[key] }), {}); // Example: same as above
3. Utilisation de map() et de la syntaxe de propagation
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj) .filter(([key, value]) => predicate(value)) .map(([key, value]) => [key, value]) ); // Example: same as above
4. Utilisation de Object.entries() et Object.fromEntries()
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) ); // Example: same as above
N'oubliez pas que l'extension des prototypes intégrés peut avoir des conséquences inattendues. Il est généralement préférable de fournir des fonctions personnalisées en tant qu'utilitaires autonomes ou d'étendre des objets globaux spécifiquement pour des fonctionnalités spécifiques.
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!