Javascript: какой поиск быстрее: array.indexOf против хеша объекта?

Мне нужно выполнить много поисков, анализируя xmlStream, если мне нужен какой-то тэг или нет.

Я могу сделать это с помощью метода array.indexOf(у меня около ~ 15 элементов в массиве) или с помощью поиска объекта [key].

Второе решение кажется более эффективным в теории для меня, но не выглядит красивым в моем коде. Но если это действительно более эффективно, я оставил бы его как есть.

например:.

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

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

tags.indexOf(value) // exists?
tags2[value] // exists?

Ответ 1

Ну, производительность зависит от вашего размера набора и вашего шаблона доступа. В общем случае indexOf равен O (n), а hash - O (1), поскольку у вас есть только около 15 элементов в наборе, и пусть каждый доступ полностью независим и равновероятен, преимущество хэша на самом деле отсутствует.

Ответ 2

Array.indexOf() ключа Object выполняется быстрее, чем Array.indexOf(). Вы можете проверить это на jsperf.

Результаты теста:

массив

Индекс 10000 пунктов: 26 547 операций/сек
Индекс 100000 пунктов: 2493 операций/сек

объект

Ключ поиска из 10000 предметов: 152 115 операций/сек
Ключ поиска из 100000 позиций: 150 450 операций/сек