43

I have to perform a LOT of lookups, while parsing xmlStream if i need some tag or not.

I can do it with array.indexOf method (i have about ~15 items in array) or using object[key] lookup.

Second solution seems more efficient in theory for me, but does not look line nice in my code. But if it is really more efficient, i would leave it as it is.

E.g.:

var tags = [
    'tag1',
    'tag2',
    'tag3',
    ...
];

var tags2 = {
    'tag1' : null,
    'tag2' : null,
    'tag3' : null,
}

tags.indexOf(value) // exists?
tags2[value] // exists?
avasin
  • 9,186
  • 18
  • 80
  • 127

2 Answers2

62

Object key lookup is faster than Array.indexOf(). You can check it on jsperf.

Test Results:

Array

Index of 10000 items: 26,547 Operations/sec
Index of 100000 items: 2,493 Operations/sec

Object

Lookup key of 10000 items: 152,115 Operations/sec
Lookup key of 100000 items: 150,450 Operations/sec

Community
  • 1
  • 1
StefansArya
  • 2,802
  • 3
  • 24
  • 25
19

Well, the performance depends on your set size and your access pattern. In general, the indexOf is O(n) and hash is O(1), however, since you only have about 15 items in the set and let's say each access is completely independent and equiprobable, the advantage of hash isn't really there.

baozi
  • 352
  • 4
  • 6