Эффективные способы найти элемент в массиве JavaScript

Та же проблема здесь, поскольку yesteray с jquery 3.1.0 происходит так же на рабочем веб-сайте и только с chrome для ПК (хорошо работает на мобильных устройствах) Исправлена ​​ошибка в jquery 2.2.3

8
задан Paul Dixon 13 March 2009 в 17:05
поделиться

4 ответа

Линейный поисковый подход имеет сложность O (n), и я думаю, что худший случай для подхода ассоциативного массива, вероятно, O (зарегистрируйте n), (лучший случай, возможно, O (1), если механизм JS использует хеши и не получает коллизий). Это будет зависеть от того, как механизм JS обычно реализует ассоциативные массивы/объекты, но можно быть уверены, что это разобьет O (n).

Так, второй подход будет быстрее, но будет, конечно, использовать больше памяти. Это - очень типичный компромисс, получая больше скорости, но с помощью большей памяти, и только можно решить, хотите ли Вы сделать ту торговлю.

11
ответ дан 5 December 2019 в 19:03
поделиться

Также важно рассмотреть количество пар значения ключа, которых необходимо будет сохранить. Если его меньше чем ~50 (в зависимости от реализации) затем выполнение линейного поиска будут так же эффективны как выполнение поиска хеш-таблицы из-за стоимости вычисления значения хэш-функции и разрешения коллизий. Исключением является механизм JavaScript Google Chrome v8, сохраняет своего рода кэшированную версию всех объектов, которые позволяют этому выполнять прямой поиск свойства на объекте, поэтому использование Класса объекта, поскольку хеш-таблица может быть быстрее, хотя я не уверен, перевесит ли стоимость создания этой кэшированной версии преимущество для меньших списков.

0
ответ дан 5 December 2019 в 19:03
поделиться

Массивы JavaScript могут использовать значение, такое как заголовок "why-birds-fly" для индекса.

Экс-клен: заголовок var = "why-birds-fly";

var TitleArray [] = новый Массив ();

TitleArray [заголовок] = идентификатор;

Затем у Вас есть прямой доступ к идентификатору заголовком:

возвратите TitleArray [заголовок];

-2
ответ дан 5 December 2019 в 19:03
поделиться

Можно использовать indexOf функцию Массива в первом методе.

Ниже информация от Разработчика Mozilla: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:Array:indexOf

indexOf является расширением JavaScript стандарта ECMA-262; как таковой это не может присутствовать в других реализациях стандарта. Можно работать вокруг этого путем введения следующего кода в начале сценариев, разрешения использования indexOf в ECMA 262 реализации, которые исходно не поддерживают его. Этот алгоритм является точно тем, используемым в Firefox и SpiderMonkey.

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
   };
}
0
ответ дан 5 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: