javascript - for 循环中的 JS 数组

标签 javascript arrays loops

这段代码将在控制台上打印 [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/

相关文章:

javascript - 创建基本的 Google 脚本来复制 SS 并保存到我的驱动器上的特定文件夹

javascript - 如何使用 Javascript 将毫秒转换为可读日期?

javascript - AngularFire:返回 $value

javascript - 使用 ajax 从数据库 EntityFramework 中删除记录

java - Java可以使用用户定义的对象作为二维数组键的索引吗?

php - 合并具有相同数量项目的 2 个数组 - php

c++ - 在 C++ 中从 3D vector 中删除元素

javascript - 在 JSON 对象中搜索特定键

java - 删除在第一个索引处停止的索引方法(java字符串数组)

java - 当有更好的循环可用时,为什么我们要使用 do-while 循环?