【问题标题】:Why is my Javascript for loop not looping?为什么我的 Javascript for 循环不循环?
【发布时间】:2018-10-11 16:38:18
【问题描述】:

我正在尝试编写一个 for 循环,将数组(参数:arr)拆分为给定大小(参数:size)的子数组,但它似乎提前退出了 for 循环/实际上并未循环返回在。

这段代码应该返回[['a', 'b'] ['c', 'd']],但现在只返回[['a', 'b']]

我已经尝试过研究,但我无法确定我的代码中阻止循环返回数组的原因。

function chunkArrayInGroups(arr, size) {
  var newArr = [
    []
  ];
  for (var i = 0; i < arr.length; i++) {
    newArr[0].push(arr.shift(arr.slice(i, size)));
  }
  return newArr;
}

//calling the function:
console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));

请帮我解决这个问题。

【问题讨论】:

  • 您想要[['a', 'b'] ['c', 'd']] 还是[[['a', 'b'] ['c', 'd']]]?您将切片推送到newArr[0],而不是newArr,因此所有内容都应该嵌套一个额外的级别。

标签: javascript arrays algorithm for-loop iteration


【解决方案1】:

您可以使用while 循环并根据数组长度检查位置。

function chunkArrayInGroups(array, size) {
    var result = [],
        i = 0;

    while (i < array.length) {
        result.push(array.slice(i, i += size));
    }

    return result;
}

console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    在 for 循环中增加 isize。在每次迭代中,切片一个长度为size(在ii + size 之间)的数组,并将其推送到newArr

    function chunkArrayInGroups(arr, size) {
      var newArr = [];
      for (var i = 0; i < arr.length; i += size) {
        newArr.push(arr.slice(i, i + size));
      }
      return newArr;
    }
    
    //calling the function:
    console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));

    【讨论】:

    • 非常感谢!这完全有道理!
    【解决方案3】:

    您在循环遍历数组时正在修改数组,因为arr.shift() 会从数组中删除第一个元素并返回它。您将删除的元素推送到 newArr[0],而不是切片。

    所以在循环的第一次迭代中,arr 是:

    ['a', 'b', 'c', 'd']
    

    您将'a' 推入结果数组,将其从arr 中删除,然后递增i

    在下一次迭代中,arr

    ['b', 'c', 'd']
    

    您将'b' 推入结果数组,将其从arr 中删除,然后递增i

    在下一次迭代中,arr

    ['c', 'd']
    

    i现在是2,不小于arr.length,所以循环结束。

    没有理由使用arr.shift(),只需使用arr.slice() 来获取块。您需要按块大小进行迭代,而不是 1。slice() 的第二个参数是结束位置(不包含),而不是大小,因此您需要添加 i + size

    function chunkArrayInGroups(arr, size) {
      var newArr = [
        []
      ];
      for (var i = 0; i < arr.length; i += size) {
        newArr[0].push(arr.slice(i, i+size));
      }
      return newArr;
    }
    
    //calling the function:
    console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多