2013-02-27 3 views
1

Что происходит быстрее в JavaScript: цикл через массив с целыми индексами или цикл через объект со свойствами? Какая разница в производительности, если таковая имеется?Свойства объекта Loop vs численно индексированного массива

var array = [1, 2, 3]; 
for (var i = 0; i < array.length; i++) { 
} 

По сравнению с:

var object = {"1":1, "2":2, "3":3}; 
for (var x in object) { 
} 

В меру моего понимания JavaScript массивы фактически опираются на карте, так что я бы ожидать, как выполнить то же самое. Любая информация очень ценится!

EDIT: Я, вероятно, следует уточнить, что я заинтересован в накладных петель (например, если for in дороже), а также время поиска доступа к каждому элементу (object[x] против array[i]).

+1

jsperf.com находится прямо здесь, чтобы вы могли использовать ... – Jon

ответ

2

Принятый ответ использует неверный контрольный показатель и является полностью неправильным. Как отмечают комментарии, console.log будет доминировать над результатами тестирования, делая их бесполезными. Посмотрите на это сравнение: http://jsperf.com/performance-of-array-vs-object/17

Итерация массива примерно в 48 раз быстрее, чем итерация объекта. Он значительно улучшается, если вы заранее знаете диапазон ключей объекта, но все же значительно медленнее, чем итерация массива.

+0

хороший момент, не думал о консоли .log ... upvote! – hereandnow78

0

Я создал jsperf http://jsperf.com/array-vs-object-loop.

Я подумал, что для дополнительного доступа к собственности потребуется больше времени. в chrome 24 это не имеет большого значения, в firefox 19 путь объекта должен на 5-10% дольше.

Вы также должны учитывать размер объекта/массива.

EDIT: забудьте об этом ответе, взгляните на принятый!

+0

спасибо! Я не знал об этом сайте для создания тестов производительности. – tau

+0

Похоже, вы регистрируете весь массив в цикле, а не одну запись. Это отличается от цикла над объектом. – Jacco

+0

Да, ты прав, я виноват. я починил это! результаты кажутся неизменными ... (по крайней мере для меня) – hereandnow78

Смежные вопросы