En JS, ce qui est plus rapide: Objet de l'opérateur “in” ou de la Matrice indexof?

Je tiens à garder une liste de chaînes de caractères que je ne jamais vérifier la présence d', par exemple:

corporatePlan = [
    'canDeAuthorize',
    'hasGmailSupport',
    'canShareReports',
    'canSummonKraken',
    'etc'
]

Ainsi, lorsque l'utilisateur tente d'invoquer le kraken, je vais le faire corporatePlan.indexof('canSummonKraken') != -1 pour voir si il peut.

Un collègue suggère qu'il serait plus rapide pour stocker un objet:

"Corporate Plan" = {
    'canDeAuthorize' : null,
    'hasGmailSupport' : null,
    'canShareReports' : null,
    'canSummonKraken' : null,
    'etc' : null
}

Et il suffit de faire quelque chose comme 'canSummonKraken' in corporatePlan pour vérifier si le plan contient cette clé. Cela a du sens dans un classique de la CS de sens, puisque bien entendu, 'contient' est la constante de temps sur une carte et linéaire sur un tableau. Est-ce à vérifier à l'encontre de la façon dont les tableaux et les objets sont mis en œuvre sous le capot en JS, si?

Dans notre cas particulier, avec moins de 100 éléments, la vitesse n'a pas beaucoup d'importance. Mais pour un ensemble plus grand, ce qui serait plus rapide sur l'accès?

  • N'oubliez pas la virgule après le nulls dans votre objet littéral.
  • Bon d'appel fixe.
  • @Fish: FWIW, j'ai mis à jour ma réponse à proposer une troisième option qui, je pense, serait assez normal de chemin à faire.
  • cochez cette référence: jsben.ch/#/Y9jDP
InformationsquelleAutor Fishtoaster | 2011-10-12