这段代码将在控制台上打印 [1,2,3,4,5,6,7,8,9,10]
这意味着每次迭代 arr.length 都会发生变化这也反射(reflect)在循环体中。
let arr = [1, 2, 3];
for (e of arr) {
arr.push(arr[arr.length - 1] + 1);
if (arr.length >= 10) break;
}
console.log(arr)
但是在这里,输出将是[4,5,6]
,这意味着shift()函数不考虑数组的扩展。
let arr = [1, 2, 3];
for (e of arr) {
arr.push(arr[arr.length - 1] + 1);
if (arr[arr.length - 1] >= 10) break;
arr.shift();
}
console.log(arr)
我的问题是为什么?我期望第二个代码输出 [8,9,10]
输出
最佳答案
原因是你先添加了元素,然后调用shift()
删除元素,所以数组大小不会改变,只会迭代一次
let arr = [1, 2, 3];
for (e of arr) {
arr.push(arr[arr.length - 1] + 1); // add element
if (arr[arr.length - 1] >= 10) break;
arr.shift(); // remove element
}
console.log(arr)
为了得到您期望的结果,我们需要确保它可以迭代多次,直到得到期望的结果。所以我们可以将for
改为while
let arr = [1, 2, 3];
while(arr.at(-1) < 10) {
arr.push(arr.at(-1) + 1);
arr.shift();
}
console.log(arr)
关于javascript - for 循环中的 JS 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74336187/