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 операций/сек