Теперь я практикую некоторые методы в javascript, например shift(), unshift(), push(), pop()
, и я хочу написать небольшую функцию, которая будет принимать 3 аргумента, массив, начальную точку, конец точка. Которая используется для вырезания части массива, а затем возвращает как новый массив, так и отрезаемую часть. Не очень полезная вещь или большое дело, просто хотите практиковать javascript.Что-то странное происходит при использовании переменной.length в цикле for
Но я встретил странную вещь, о которой я не знаю почему.
Вот странное
var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1];
for(var i=0; i<a2.length; i++){
a1.unshift(a2.shift())
}
Так что я написал этот код, и ожидаемый результат должен быть
a1 = [1,2,4,5,6,7,8,9]
a2 = []
Однако, когда я запускаю код, это было то, что на самом деле произошло
a1 = [5,6,7,8,9]
a2 = [4,3,2,1]
Кажется, что функция была зациклирована недостаточно, поэтому я попытался изменить a2.length на a Тегер: 9
, которые делают код стал
var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1];
for(var i=0; i<9; i++){
a1.unshift(a2.shift())
}
И это сработало!
Тогда я изменить подход к этому
var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1]
var aLength = a2.length;
for(var i=0; i<aLength; i++){
a1.unshift(a2.shift())
}
И это сработало тоже !!!
Может ли кто-нибудь сказать мне, почему это так ??? И как я могу улучшить цикл?
Спасибо, очень ценю за ваше время.
Каждая итерация для цикла уменьшает длину массив a2 на 1. Поэтому, когда он зацикливается через 5, осталось только 4, а индекс, который вы в данный момент выполняете, равен 5. 5 = 0; i -) 'или используя while while while (a2.length> 0)'. –
Puuskis
О, я так глуп ... Спасибо, ребята. Для ответа flav, почему внутренняя петля len не будет создавать новую копию a2.length каждый раз при запуске цикла? – Saxon