Maison >interface Web >js tutoriel >Comment puis-je rechercher efficacement des objets dans des tableaux JavaScript en fonction des valeurs d'attribut ?
Lorsque l'on traite des tableaux d'objets, il est souvent nécessaire de rechercher des éléments spécifiques en fonction des valeurs d'attribut. Ceci est particulièrement utile lorsque vous travaillez avec de grands tableaux pour éviter les boucles inefficaces.
Considérez le tableau suivant d'objets fournisseur :
vendors = [{ Name: 'Magenic', ID: 'ABC' }, { Name: 'Microsoft', ID: 'DEF' } // and so on... ];
L'objectif est de déterminer si un objet avec l'attribut Name égal à "Magenic" existe au sein de ce tableau sans recourir à des boucles explicites.
JavaScript moderne fournit plusieurs méthodes de tableau qui rendent cette tâche sans effort :
En utilisant certains :
if (vendors.some(e => e.Name === 'Magenic')) { // We found at least one object that we're looking for! }
certains parcourent le tableau et renvoient vrai dès qu'il trouve un élément qui correspond à la condition spécifiée.
Utilisation find :
if (vendors.find(e => e.Name === 'Magenic')) { // Usually the same result as above, but find returns the found object instead of a boolean }
find se comporte de la même manière que certains, mais au lieu de renvoyer un booléen, il renvoie le premier élément qui correspond à la condition.
Obtenir la position de l'objet :
Pour obtenir la position de l'élément correspondant, utilisez findIndex :
const i = vendors.findIndex(e => e.Name === 'Magenic'); if (i > -1) { // We know that at least 1 object that matches has been found at the index i }
Recherche de tous les objets correspondants :
if (vendors.filter(e => e.Name === 'Magenic').length > 0) { // The same result as above, but filter returns all objects that match }
filter renvoie un tableau de tous les éléments qui satisfont à la condition spécifiée.
Compatibilité avec les anciens navigateurs :
Pour les navigateurs qui ne prennent pas en charge fonctions fléchées, une approche alternative utilisant la méthode de filtre standard est :
if (vendors.filter(function(e) { return e.Name === 'Magenic'; }).length > 0) { // The same result as above, but filter returns all objects that match and we avoid an arrow function for compatibility }
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!