此代码只打印数字,直到它打算将数字打印到5,这有什么不对?
function reversingwithout (array){
for(var i=0;i<array.length;i++){
var old = array.shift(array[i])
console.log(old);
}
}
var hh = [1,2,3,4,5];
reversingwithout(hh);
答案 0 :(得分:1)
这是因为array.shift
操作正在改变循环中的数组。
shift()方法从数组中删除第一个元素并返回 那个元素。此方法更改数组的长度。
尝试预先在变量中保存数组长度:
var hh = [1,2,3,4,5];
var length = hh.length;
function reversingwithout (array){
for(var i=0;i<length;i++){
var old = array.shift()
console.log(old);
}
}
reversingwithout(hh);
另请注意,array.shift
不带参数。
JSBin:https://jsbin.com/paleyifija/1/edit?html,console,output
答案 1 :(得分:1)
了解循环条件如何在迭代中发展:
i == 0
,array.length == 5
。行i == 1
,array.length == 4
。行i == 2
,array.length == 3
。行i == 3
,array.length == 2
。结束循环我认为你误解了shift
。如果您只想打印所有项目,只需执行类似
for(var i=0; i<array.length; ++i) console.log(array[i]);
答案 2 :(得分:0)
shift()方法从数组中删除第一个元素并返回该元素。此方法更改数组的长度。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
每次检查环路保护时,都会计算array.length
的值。调用Array.shift()
时,循环体从数组中删除一个元素,从而减少数组的长度。因此,在循环退出时,i == 3
和array.length == 2
。
您可以通过将array.length
的初始值存储在变量中并在循环保护中使用该变量来解决此问题。
e.g。
var len = array.length;
for (var i = 0; i < len; i++) { ...