为什么数组的其他块被忽略?

时间:2015-06-07 06:39:24

标签: javascript arrays

function chunk(arr, size) {
  var newr = [];
  var temp = [];
  for (var i = 0; i < arr.length; i++) {
   if (temp.length != size) {
      temp.push(arr[i]);
    } else {
      newr.push(temp);
      temp = [];
    }

  }
  return newr;
}

chunk(['a', 'b', 'c', 'd'], 2);

有人可以帮助我,为什么我的代码不起作用?它只显示第一个数组并忽略第二个数组。

2 个答案:

答案 0 :(得分:0)

以下是使用Array.splice()执行此操作的一种有效方式:

function chunk(arr, size) {
    var out = [];
    while(arr.length) out.push(arr.splice(0, size));
    return out;
}

致电chunk(['a', 'b', 'c', 'd'], 2);将返回:

[
    ["a", "b"],
    ["c", "d"]
]

注意:上面的方法修改传递给函数的原始数组。

答案 1 :(得分:0)

要修复您的代码,请尝试

function chunk(arr, size) {
    var newr = [];
    var temp = [];
    for (var i = 0; i < arr.length; i++) {
        temp.push(arr[i]);

        if(temp.length==size || i==arr.length-1) {
            newr.push(temp);
            temp = [];
        }
    }
    return newr;
}

chunk(['a', 'b', 'c', 'd'], 2); // results in [['a','b'],['c','d']]
chunk(['a', 'b', 'c', 'd', 'e'], 2); // results in [['a','b'],['c','d'],['e']]

为什么以前的代码不起作用

你的病情很好。最后一次迭代确实正确收集['c','d']中的最后一个块temp,但它没有添加到newr列表中。因此,在我的代码中进行了一些修改以解决这个问题,如上所示。