Итерация по массиву объектов в Javascript - почему я не могу получить текущий объект внутри для приращения блока? - PullRequest
0 голосов
/ 11 августа 2011

Допустим, у меня есть массив

var array = [
    {name: "woo"},
    {name: "yay"},
    {name: "hoopla"}
] 

Почему это работает

for (var i=0; i<array.length; i++) {
    var item=array[i];
    alert(item.name) // woo, yay, hoopla
}

Но это не так?

var item;
for (var i=0; i<array.length; item=array[i++]) {
    alert(item.name) // undefined
}

Вот тест jsPerfслучай сравнения скорости разных ответов: http://jsperf.com/different-ways-to-iterate-over-an-array-of-objects/2

Ответы [ 5 ]

3 голосов
/ 11 августа 2011

На первой итерации цикла item=array[i++] еще не было выполнено, поэтому item все еще имеет свое начальное значение.Третья часть оператора for выполняется между итерациями, но не при запуске циклов.

1 голос
/ 11 августа 2011

Это должно работать

var item;
for (var i=0; item=array[i], i<array.length; i++) {
    alert(item.name) // undefined
}
1 голос
/ 11 августа 2011

Это потому, что в первый раз в цикле переменная item не получает присваивания

A for инструкция состоит из 3 частей, счетчик (var i = 0;), предел (я

0 голосов
/ 18 сентября 2011

Другой способ перечисления массива объектов в JavaScript:

for(var item in array)
    alert(array[item])
0 голосов
/ 11 августа 2011

Поскольку в первой итерации item еще не определено, оно будет работать, если вы измените свой код на:

for ( item=array[i=0]; i<array.length; item=array[++i] ) {
    alert(item.name)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...