在Javascript中弹出数组for循环不获取所有数组项

时间:2015-10-19 22:02:43

标签: javascript for-loop stack pop

我正在试图找出为什么下面这段代码只会弹出数组中的最后3个项目而不是最后两个。

var test = ['test1','test2','test3','test4','test5'];

console.log('length - '+test.length);

for(var k = 0; k <= test.length; k++) {
    var tests = test.pop();
    console.log(tests+' - '+k);
}

以上代码的结果:

length - 5
(index):30 test5 - 0
(index):30 test4 - 1
(index):30 test3 - 2

5 个答案:

答案 0 :(得分:2)

Array.prototype.pop方法修改原始数组,因此for循环只会访问一半的值,直到数组完全清空。

你可以做的是改用while循环:

var test = ['test1', 'test2', 'test3', 'test4', 'test5'];

console.log('length - ' + test.length);

while (test.length) {
  var tests = test.pop();
  console.log(tests);
}

答案 1 :(得分:2)

问题是当循环执行时数组的长度正在改变,因此每次执行时测试k <= test.length都在变化。

var test = ['test1','test2','test3','test4','test5'];

console.log('length - '+test.length);

for ( var k = 0, len = test.length; k < len; k++ ) {
  var tests = test.pop();
  console.log(tests+' - '+k);
}

或使用while循环:

var test = ['test1','test2','test3','test4','test5'];

console.log('length - '+test.length);

var k = 0;
while (test.length) {
    var tests = test.pop();
    console.log(tests+' - '+(k++));
}

答案 2 :(得分:1)

每次增加k。打印2k == 3后,列表中仍有2个元素。但是从k > test.length开始,循环就结束了。

如果你真的还想继续计算,请增加k,但不要测试它:

var test = ['test1', 'test2', 'test3', 'test4', 'test5'];

console.log('length - ' + test.length);

for (var k = 0; test.length > 0; k++) {
  var tests = test.pop();
  console.log(tests + ' - ' + k);
}

答案 3 :(得分:1)

考虑你正在做的事情的逻辑......你在两端烧蜡烛(可以这么说)。

k = 0,长度= 5('test1') 在这一点上,test5被抛弃了(这就是pop所做的,it drops the last element

k = 1,长度= 4('test2')(此时test4被丢弃)

依此类推......经过3次迭代,你的数组就是3个项目。

我认为你要用splice

完成的任务
while(myArray.length > 0){
   console.log(myArray[0])
   myArray.splice(0,1)

}

答案 4 :(得分:0)

如果您想保留代码样式,只需添加以下行。这是为了防止for循环中的数组长度重新调整大小:

var arrSize = test.length;

您的最终代码如下所示:

<script>
    var test = ['test1', 'test2', 'test3', 'test4', 'test5'];

    var arrSize = test.length;

    console.log('length - ' + arrSize);

    for (var k = 0; k < arrSize; k++) {
        var tests = test.pop();
        console.log(tests + ' - ' + k);
    }
</script>