JavaScript: цикл по массиву - PullRequest
0 голосов
/ 11 октября 2010

Было бы неправильно заключать, что самый быстрый способ перебрать массив JavaScript - это использовать цикл for-in?Например:

for (var index in items) {
    ...
}

См. http://jsperf.com/loop-test2/2

Ответы [ 4 ]

5 голосов
/ 11 октября 2010

Инструкция for-in не должна использоваться для итерации над массивом или элементами, похожими на массивы.

Цель этого оператора для перечисления свойств объекта.

Его нельзя использовать для объектов, подобных массиву, поскольку:

  • Порядок итерации не гарантирован, индексы массива могут не посещаться в числовом порядке.
  • Перечисляются также унаследованные свойства.

До итерация по массиву, рекомендуется последовательный цикл всегда .

Рекомендуемая статья:

Редактировать: О, также я забыл упомянуть, что вашtest является полностью смещенным , поскольку выражение new Array(10000) просто инициализирует объект Array с 10000 в качестве значения свойства length, числовые свойства index donдаже не существует, поэтому кажется самым быстрым, например:

var a = new Array(10);
a.length; // 10
a.hasOwnProperty('0'); // false, the indexes don't even exist!
a.hasOwnProperty('1'); // false
//...

Попробуйте это честный тест , с объектом массива, который действительно содержит 10000 элементов, и вы будете удивлены.:)

2 голосов
/ 11 октября 2010

Да, это может быть самым быстрым, но это небезопасно и не является целью for-in цикла ... так что это действительно спорный вопрос.

Быть быстрым - не проблема, пока не станет правильным:)

Например, проверьте это в IE: http://jsfiddle.net/nick_craver/z52gx/ Вы заметите, что заказ неправильный.

1 голос
/ 11 октября 2010

Это немного устарело (включает только FF3.0 и IE8b), но оно довольно всеобъемлющее.

http://blogs.oracle.com/greimer/entry/best_way_to_code_a

Реверс, в то время как циклы с упрощенным условием выглядят самыми быстрыми:
var len; while(len--){}

1 голос
/ 11 октября 2010

Является ли это самым быстрым или нет, зависит от реализации. Учтите, что каждый крупный поставщик браузеров имеет свою собственную реализацию, плюс мобильную реализацию, а также все старые браузеры, которые все еще используются, и бета-браузеры, демонстрирующие движки JavaScript следующего поколения ... «всего» около 30 различных реализаций JavaScript там * * сейчас . И даже если в настоящее время это происходит быстрее всех или большинства из них, движки JavaScript все еще быстро развиваются.

И это даже при условии, что javascript - это ваше узкое место. Вот совет - медленный, как javascript, редко узкое место для рендеринга страниц. Скорость интернет-передачи и время отклика сервера, как правило, являются гораздо более важными факторами.

Может быть, лучше сначала написать код на правильность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...