Pas de boucle nécessaire. Trois méthodes qui me viennent à l'esprit :
Array.prototype.some()
C'est la réponse la plus exacte à votre question, c'est-à-dire "vérifier si quelque chose existe", ce qui implique un résultat bool. Ce sera vrai s'il y a des objets 'Magenic', faux sinon :
let hasMagenicVendor = vendors.some( vendor => vendor['Name'] === 'Magenic' )
Array.prototype.filter()
Ceci retournera un tableau de tous les objets 'Magenic', même s'il n'y en a qu'un seul (retournera un tableau à un élément) :
let magenicVendors = vendors.filter( vendor => vendor['Name'] === 'Magenic' )
Si vous essayez de convertir cela en booléen, cela ne fonctionnera pas, car un tableau vide (sans objets 'Magenic') est toujours vrai. Il suffit donc d'utiliser magenicVendors.length
dans votre conditionnel.
Array.prototype.find()
Cela renverra le premier objet 'Magenic' (ou undefined
s'il n'y en a pas) :
let magenicVendor = vendors.find( vendor => vendor['Name'] === 'Magenic' );
Cela coercitive à un booléen ok (tout objet est vrai, undefined
n'est pas fiable).
Remarque : j'utilise vendor["Name"] au lieu de vendor.Name en raison de la casse bizarre des noms de propriétés.
Note 2 : Il n'y a aucune raison d'utiliser une égalité libre (==) au lieu d'une égalité stricte (===) lors de la vérification du nom.
1 votes
Veuillez pardonner ce commentaire apparemment aléatoire, mais votre question concernait-elle JSON ou seulement les tableaux JavaScript ?
11 votes
La solution de @CAFxX est meilleure, ce serait génial si vous mettiez à jour la solution sélectionnée.
3 votes
D'accord, je n'avais pas vu ça avant !
2 votes
Vous pouvez simplifier encore plus les choses en utilisant les fonctions de flèches. Tous les navigateurs modernes prennent en charge cette fonction, qui est plus agréable à utiliser.
1 votes
Vous pouvez utiliser la fonction carte, très utile
3 votes
@eMarine : La question de l'OP mentionne spécifiquement la performance comme étant une préoccupation majeure. Par conséquent, l'utilisation de
filter
osome
bien que jolie, n'est pas aussi bonne que l'utilisation d'une boucle explicite. (Elles entraînent une baisse des performances en raison de la nécessité d'exécuter la lambda pour chaque élément du tableau).4 votes
420 ne peut pas upvote mais cette question montre l'effort de recherche et est utile et claire.
2 votes
@DavidLozzi
.some
serait plus performant que.filter
puisqu'il arrête sa recherche lorsqu'il trouve la première instance de ce que vous recherchez.