将数组分成组

用户名

我期望编写一个将数组(第一个参数)分成大小(第二个参数)长度的组并将其作为二维数组返回的函数。因此,chunkArrayInGroups([“ a”,“ b”,“ c”,“ d”],2)应该返回[[“ a”,“ b”],[“ c”,“ d”]]

function chunkArrayInGroups(arr, size) {
  // Break it up.
  var result=[];
  for (var i=0;i<=Math.ceil(arr.length/size);i++){

      var j=0;
      if(i!== 0){
        j+=size;
        size+=size;
      }

      result[i] = arr.slice(j , size);  

  }
  //return arr.length/size 
  //results in 1.5

return result;
// results [["a", "b"], ["c", "d"]]


}

chunkArrayInGroups(["a", "b", "c", "d"], 2);

我得到了期望的结果,但对解决方案不是很满意,而且,更重要的是,“如果” arr.length = 4; 并且,大小= 2;那为什么arr.length / size = 1?应该不是4/2 = 2吗?

斯蒂芬·豪斯坦(Stefan Haustein)

您在循环内修改大小。这基本上使每一步的大小增加一倍。您的示例只有两个子数组的事实掩盖了此问题。尝试更大的数组以查看结果中的问题。

要解决此问题,请在循环外部声明j。切片后将大小添加到j。

编辑:代码,根据要求

function chunkArrayInGroups(arr, size) {
  var result = [];
  var j = 0;
  for (var i = 0; i < Math.ceil(arr.length / size); i++) {
    result[i] = arr.slice(j, j + size);
    j = j + size;
  }
  return result;
}

或者,稍微简化一下:

function chunkArrayInGroups(arr, size) {
  var result = [];
  var pos = 0;
  while (pos < size) {
    result.push(arr.slice(pos, pos + size));
    pos += size;
  }
  return result;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章