массив javascript для цикла i + 1, возвращающего неопределенное значение - PullRequest
1 голос
/ 27 мая 2011

массив ref.length = 7 (0 - 6), и я хочу попробовать сопоставить ref [0] ['x'] с ref [1] ['x']. Я делаю это:

   for(var i=0;i<ref.length;i++){
      if( ref[i]['x'] != ref[i+1]['x'] && ref[i+1]['x'].length > 0 )
         //do something
   }

Цикл for выполняет итерацию до массива номер 6, тогда элемент 6 + 1 пуст, поэтому я получаю сообщение об ошибке в строке оператора if, в котором говорится, что ref [i + 1] не определено ....

есть ли лучший способ сделать это?

Ответы [ 6 ]

3 голосов
/ 27 мая 2011

Лучше:

for (var i=ref.length-2;i>=0;i--)

Javascript будет оценивать условие на каждой итерации, поэтому обычно предпочтительнее идти назад. С этой конструкцией «ref.length» оценивается только один раз. Еще одна альтернатива, которая мне нравится, которая будет выполнять то же самое:

var i=ref.length-1;
while (i--) {

}

(Обычно вы были бы i=ref.length-1 в первом примере и i=ref.length во втором, но вы пытаетесь остаться на единицу меньше длины массива).

2 голосов
/ 27 мая 2011
for (var i=0; i<ref.length-1; i++) { // Note the "-1".

Таким образом, когда вы используете индекс i+1, вы все еще находитесь в границах.

1 голос
/ 27 мая 2011

for (var i = 0; i < ref.length - 1; i++)

0 голосов
/ 26 августа 2013

Вот простое решение. Просто посчитай счетчик снова.

if( ref[i]['x'] != ref[++i]['x'] && ref[++i]['x'].length > 0 )
0 голосов
/ 27 мая 2011

Если вы просто используете ref.length-1, это не решит вашу проблему?Я не совсем понимаю, о чем вы спрашиваете.

0 голосов
/ 27 мая 2011

А как же:

for(var i=0;i<ref.length-1;i++){
...