为什么我的Javascript for循环不循环?

时间:2018-05-01 16:08:54

标签: javascript arrays algorithm for-loop iteration

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

此代码应返回[['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));

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

您可以使用{ "MyService": { "ConnectionString": "…" }, // … } 循环并根据数组的长度检查位置。

&#13;
&#13;
while
&#13;
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));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

在包含i的for循环增量size中。在每个迭代切片上,长度为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));

答案 2 :(得分:0)

当你循环遍历数组时,你正在修改数组,因为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));