Est-il plus efficace de rechercher une clé dans un object que de rechercher une chaîne dans un tableau?

Je crée une structure de données qui contiendra que je vais utiliser pour vérifier de manière répétée si certaines valeurs sont définies. J’ai proposé deux solutions possibles et je me demande ce qui est le plus efficace ou s’il existe un meilleur moyen que ce soit:

1) Utilisez un tableau: keys = ['key1' , 'key2', 'key3']

Je peux créer un tableau comme celui-ci, puis utiliser jQuery.inArray(keyToCheck, keys) > -1 pour vérifier si la keyToCheck figure dans mon tableau.

2) Utilisez un object: keys = {key1 : 1, key2 : 1, key3: 1}

Je peux créer cet object puis utiliser les keys[keyToCheck] || 0 keys[keyToCheck] || 0 pour voir si keyToCheck est défini.

Ce que je ne sais pas, c’est comment la recherche d’un object est implémentée en javascript, et si c’est plus efficace que jQuery.inArray , qui parcourt un tableau. Existe-t-il une différence de performance entre ces méthodes? L’utilisation de jQuery n’est pas un problème pour moi car je l’ai déjà dans mon code pour d’autres raisons.

Lorsque vous vous interrogez sur les performances, une solution consiste à tester plusieurs cas sur jsperf.
(Il pourrait y avoir un autre site de référence que je ne connais pas, veuillez commenter si vous en connaissez un autre, je ne veux pas faire de publicité)

Pour votre cas, j’ai testé 3 méthodes:
– utiliser indexOf dans un tableau
– en utilisant l’opérateur ‘in’
– tester la valeur de la propriété de l’object

le psperf est là pour environ 10 articles est ici: http://jsperf.com/key-or-array-search/2 entrez la description de l'image ici

Nous pouvons voir que l’utilisation de la valeur de la propriété de l’object est de loin plus rapide sous Firefox (> 20 fois plus rapide qu’un tableau,> 5 fois plus que dans).
Sur Safari, tout est plus lent que sur Firefox, mais l’access aux propriétés de l’object est plus de deux fois plus rapide.
Mais sur Chrome, je ne comprends pas ce qui se passe: les 3 méthodes sont assez proches, mais la plus rapide est la méthode array / indexOf, …

Les performances sont souvent surprenantes.

Notez que les résultats peuvent changer, même de façon spectaculaire, en fonction du nombre de clés (5, 20, 5000?) Et de la probabilité qu’une clé cochée soit comprise dans l’ensemble.

Je me demandais comment les choses changeraient avec un tableau de clés de 500 longueurs. Voici les résultats: http://jsperf.com/key-or-array-search/3 entrez la description de l'image ici

Nous voyons que le tableau est vaincu pour un «grand» nombre de clés.
Vous devez donc clarifier la situation dans laquelle vous vous trouvez.
Avec un petit nombre de clés, la surcharge liée à la gestion d’une propriété fait gagner le tableau.
Avec un grand nombre de clés, le coût de l’itération dans le tableau fait que la propriété gagne …