2016-04-09 4 views
-1

Я не могу понять, что здесь не так, я пытаюсь пропустить весь массив, но его остановка на 'c'.Почему это для остановки цикла на полпути?

function foo() { 
    var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W']; 
    for (var i = 0; i < temp.length; i++) { 
    console.log(temp.pop()); 
    } 
} 

foo() // => welc 
+3

поп() удаляет элемент из массива ... вы должны использовать console.log (темп [I]) – carlosdubusm

+1

Поскольку вы оба уменьшения 'length' из массив с '.pop()' и увеличивающий 'i' с' i ++ '. Условие цикла сравнивает '0 <7',' 1 <6', '2 <5',' 3 <4', перед тем как остановиться на '4 <3'. –

ответ

0

Метод pop() удаляет последний элемент массива и возвращает этот элемент и который изменяет длину этого массива ,

И в вашей петле. вы увеличиваете i и уменьшаете длину массива. поэтому он будет идти от:

  • 0(i) < 7 (array length) в

  • 3(i) < 4 (array length) (вот ваш c)

  • , а затем выйти из цикла, потому что i будет 4 и длина массива будет 3 ,

поэтому в вашем случае вы можете использовать в console.logtemp[i], чтобы итерировать весь массив.

function foo() { 
    var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W']; 
    for (var i = 0; i < temp.length; i++) { 
    console.log(temp[i]); 
    } 
} 
1

Он делает это только половина времени, потому что, когда вы используете pop(), он автоматически уменьшает длину. Цикл for проверяет длину, когда выполняется каждый цикл. Вместо этого используйте:

function foo() { 
    var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W']; 
    for (;temp.length > 0;) { 
    console.log(temp.pop()); 
    } 
} 

Вам совсем не понадобятся счетчики. Поэтому мы можем даже переключить это на цикл while.

function foo() { 
    var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W']; 
    while (temp.length > 0) { 
    console.log(temp.pop()); 
    } 
} 
0

Когда появляется темп в течение цикла вы изменяете длину температуры

0

pop() уменьшает размер массива. Ваш код работает следующим образом (L - длина массива, I - индекс).

L I 
W 6 0 
e 5 1 
l 4 2 
c 3 3 

Таким образом, цикл останавливается, когда индекс больше не меньше, чем длина массива (i < temp.length).

Возможно изменение:

for (var i = temp.length; temp.length > 0; i--) { 
    console.log(temp.pop()); 
} 
Смежные вопросы