在 Javascript 中弹出数组 for 循环未获取所有数组项
Pop off array within Javascript for loop not getting all array items
我想弄清楚为什么下面的代码只弹出数组的最后 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
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);
}
问题是数组的长度在循环执行时发生变化,因此测试
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++));
}
您每次都在增加 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);
}
考虑一下你正在做的事情的逻辑......你在两端燃烧蜡烛(可以这么说)。
k = 0,长度 = 5 ('test1')
此时 test5 被丢弃(这就是 pop 所做的,it drops the last element)
k = 1,length = 4('test2')(此时test4丢掉)
依此类推...经过 3 次迭代后,您的数组有 3 个项目。
我*认为你想做的事你会用splice
完成
while(myArray.length > 0){
console.log(myArray[0])
myArray.splice(0,1)
}
如果您想保持自己的代码风格,只需添加以下行。这是为了防止在 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>
我想弄清楚为什么下面的代码只弹出数组的最后 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
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);
}
问题是数组的长度在循环执行时发生变化,因此测试
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++));
}
您每次都在增加 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);
}
考虑一下你正在做的事情的逻辑......你在两端燃烧蜡烛(可以这么说)。
k = 0,长度 = 5 ('test1') 此时 test5 被丢弃(这就是 pop 所做的,it drops the last element)
k = 1,length = 4('test2')(此时test4丢掉)
依此类推...经过 3 次迭代后,您的数组有 3 个项目。
我*认为你想做的事你会用splice
完成while(myArray.length > 0){
console.log(myArray[0])
myArray.splice(0,1)
}
如果您想保持自己的代码风格,只需添加以下行。这是为了防止在 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>