Maison >interface Web >js tutoriel >Comment puis-je filtrer efficacement les paires clé-valeur dans un objet JavaScript ?
JavaScript : filter() pour les objets
Le prototype filter() existe pour les types Array dans ECMAScript 5, mais pas pour les types Object. Pour implémenter une fonction filter() pour les objets en JavaScript, vous pouvez utiliser les stratégies suivantes :
1. Utilisation de réduire() et Object.keys()
Cette méthode utilise réduire() pour parcourir les clés de l'objet et Object.keys() pour récupérer ces clés. Ensuite, il filtre les clés en fonction d'une fonction de prédicat et renvoie un nouvel objet avec les paires clé-valeur filtrées :
Object.filter = (obj, predicate) => { Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {}); };
2. Utilisation de map() et de la syntaxe Spread
Une approche similaire à (1), mais au lieu de réduire(), vous pouvez utiliser map() et la syntaxe spread (...) pour créer un nouveau objet :
Object.filter = (obj, predicate) => { Object.keys(obj) .filter(key => predicate(obj[key])) .map(key => ({ [key]: obj[key] })) .reduce((a, b) => ({ ...a, ...b }), {}); };
3. Utilisation de Object.entries() et Object.fromEntries()
Cette méthode utilise Object.entries() pour convertir l'objet en un tableau de paires clé-valeur, puis Object.fromEntries() pour reconstruire l'objet après filtrage :
Object.filter = (obj, predicate) => { return Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) ); };
4. Attention : évitez d'étendre Object.prototype
Bien que ces solutions fournissent des implémentations fonctionnelles de filter() pour les objets, il est considéré comme une mauvaise pratique d'étendre directement Object.prototype. Au lieu de cela, fournissez votre fonction de filtre en tant que fonction utilitaire autonome, similaire aux fonctions utilitaires globales JavaScript existantes telles que Object.assign() et Object.keys().
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!