Javascript For 不完成数组循环

标签 javascript arrays for-loop foreach array.prototype.map

我正在尝试构建一个包含 12 个位置的数组的循环,用 5 个项目包装并在此间隔后插入另一个代码,但由于某种原因,循环最多只能达到 10 个。 为什么只有当数组有 11 或 12 个位置时循环才会在第十个位置停止? 有人可以帮我解释一下原因吗?

let x = [0,1,2,3,4,5,6,7,8,9,10,11];
x.map(_=> {
    console.log("<div>");
    x.splice(0,5).map((y,k)=>
        console.log('item: ' + y)
    )
    console.log("</div>");
    console.log('interval of 5 text');
});

x = [0,1,2,3,4,5,6,7,8,9,10,11];
for(i=0; i < x.length; i++){
    let x2 = x.splice(0,5);
    console.log("<div>");
    for(j=0; j < x2.length; j++){
        console.log('item: ' + x2[j]);
    }
    console.log("</div>");
    console.log('interval of 5');
}

最佳答案

回答你的问题为什么。

让我稍微澄清一下这个循环,只保留 splice 方法(因为它是改变数组的方法)并将数组 x 的长度记录为每次迭代中的控制台。

x = [0,1,2,3,4,5,6,7,8,9,10,11];
for(var i=0; i < x.length; i++){
    let x2 = x.splice(0,5);
    console.log(x.length);
}

让我们看看会发生什么。

loop execution:
------------------------------ 
i  |  x.length  |  i < x.length
------------------------------
0  |     12     |     true
1  |     7      |     true
2  |     2      |     false

这就是为什么循环在第二次迭代后结束(这是第 10 个位置,因为您在单次迭代中处理 5 个位置)。

<小时/> 编写执行上述逻辑并在之后使数组保持清空的代码的一种方法是这样。

创建一个执行以下操作的函数:

  • 获取数组和组的大小
  • 创建该数组的副本
  • 获得正确的迭代次数
  • 执行你的逻辑
  • 返回(空数组)并重新分配旧数组

要获得正确的迭代次数,请将数组的长度除以组的大小并将其向上舍入。

let x = [0,1,2,3,4,5,6,7,8,9,10,11];

function customArrayLoop(arr, toTake) {
  const arrCopy = [...arr];
  const loopMax = Math.ceil(x.length / toTake);

  for (let i = 0; i < loopMax; i++) {
    let x2 = arrCopy.splice(0,5);
    console.log("<div>");
    for(let j=0; j < x2.length; j++){
      console.log('item: ' + x2[j]);
    }
    console.log("</div>");
    console.log('interval of 5');
  }

  return arrCopy;
}

x = customArrayLoop(x, 5);
console.log(x);

虽然仍然不是最好的解决方案(因为您想保留循环的内部逻辑),但它是更安全的解决方案。

关于Javascript For 不完成数组循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50865032/

相关文章:

python - 在R,G,B平面中有效替换像素值python-openCV

python - python 中的条件配对列表项

javascript - 解码 Base64 URL 并嵌入 HTML

javascript - 如何使用 Greasemonkey 隐藏某些元素?

javascript - 无法添加到已初始化的数组中

javascript - 无错误 JQuery/Javascript 在 Firefox 4 或 Chrome 中无法工作

c - 每个链接列表都有较小的数组,这在 C 中有意义吗?

c - 数组的内联初始化

ios - Objective C 如何合并多个 NSMutableArray?

每个工作表循环的 Excel VBA