代码打印数字直到3,它应该打印到5

时间:2015-12-15 00:11:56

标签: javascript arrays

此代码只打印数字,直到它打算将数字打印到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);

3 个答案:

答案 0 :(得分:1)

这是因为array.shift操作正在改变循环中的数组。

Array.prototype.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)

了解循环条件如何在迭代中发展:

  1. i == 0array.length == 5。行
  2. i == 1array.length == 4。行
  3. i == 2array.length == 3。行
  4. i == 3array.length == 2。结束循环
  5. 我认为你误解了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 == 3array.length == 2

您可以通过将array.length的初始值存储在变量中并在循环保护中使用该变量来解决此问题。

e.g。

var len = array.length;
for (var i = 0; i < len; i++) { ...