我正在试图找出为什么下面这段代码只会弹出数组中的最后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
答案 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
。打印2
,k == 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>