Время поиска в мс.
Результаты тестов (Celeron 2.4)
Оказалось, что оператор in работает практически мгновенно (время выполнения всегда 0), даже в IE6!
Для оценки производительности каждого из трёх методов поиска я создал , на которой создаётся 100 000 строк вида «СтрокаN», где N номер строки, и затем производится поиск строки «Строка60000».
* This source code was highlighted with .
if ("Строка поиска" in myarray) { ... }
Использование объекта вместо массива, «значениями массива» являются ключи хеша
* This source code was highlighted with .
if (("#" + myarray.join("#,#") + "#").search("#Строка поиска#") != -1) { ... }
При использовании этого способа нужно учесть проблему уникальности вхождения подстроки поиска в склеенную из массива строку. Для этого можно, например, использовать символы склейки, которые априорно не встречаются в строке:
* This source code was highlighted with .
if (myarray.join().search("Строка поиска") != -1) { ... }
Склейка массива в строку и поиск в строке
А варианты поиска без перебора следующие:
Но так как порядок следования элементов был не важен и каждая миллисекунда была на счету, то я сравнил производительность перебора цикла в массиве с другими вариантами поиска (без перебора).
В JavaScript 1.6 существует объекта Array для поиска в массиве, но этот метод не поддерживается в Internet Explorer. Для IE данный метод реализовывается с помощью перебора массива в цикле.
Недавно решал задачу, когда нужно было определить, попадает ли определённое (строковое) значение во множество допустимых значений.
Поиск в массиве (множестве) в JavaScript
12 декабря 2008 в 00:08
Поиск в массиве (множестве) в JavaScript / Хабрахабр
Комментариев нет:
Отправить комментарий