javascript - 将数组 block 分成组 - 我的代码有什么问题?

标签 javascript arrays algorithm loops logic

代码如下:

function chunkArrayInGroups(arr, size) {
  // Break it up.
  var newArr =[];
  for(var i = 0;i < arr.length;i++){
    for(var j = 0;j < size;j++){
      newArr.push(arr.splice(0,size));
    }
  }
  var result = [];
  for(i = 0;i < newArr.length;i++){
    if(newArr[i].length != 0){
      result.push(newArr[i]);
    }
  }
  return result;
}

chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7,8], 2);

这应该返回 - [[0, 1], [2, 3], [4, 5], [6, 7], [8]]。但是,代码返回 [[0, 1], [2, 3], [4, 5], [6, 7]]。此外,如果我的输入数组是 ([0,1,2,3,4,5,6,7,8,9,10],2),我的代码会按预期返回。

P.S:我特别想找出这段代码有什么问题,而不是完全不同的代码/方法。

最佳答案

基本上你只需要一个循环,因为你拼接数组并从中获取所需大小的 block 。

此行为可用于循环直到数组的长度为零并退出循环。

在这种情况下,结果已经准备就绪。

function chunkArrayInGroups(arr, size) {
    var newArr = [];
    // for (var i = 0; i < arr.length; i++) {
    while (arr.length) {                        // add this for looping and checking
        // for (var j = 0; j < size; j++) {
        newArr.push(arr.splice(0, size));       // keep this for doing the work!
        // }
    }
    // var result = [];
    // for (i = 0; i < newArr.length; i++) {
    //     if (newArr[i].length != 0) {
    //         result.push(newArr[i]);
    //     }
    // }
    // return result;
    return newArr;                              // return only newArray
}

console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 将数组 block 分成组 - 我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46689542/

相关文章:

查找覆盖 X 百分比地理点的最小区域的算法

javascript - 仅对具有日期的单元格进行日历操作

javascript - 为什么我的 map 不在 jQuery 选项卡中呈现?

javascript - 如何通过允许部分匹配的字符串数组过滤字符串数组

c - 如何在c中将char数组元素转换为int以及其他方式?

Python - 使用前缀和计算数组中的局部最小值

javascript - getElementsByClassName 不返回任何内容

javascript - 如何用 Jest 来模拟模块的某些部分?

ios - Swift 3 Array,一次删除多个项目,使用 .remove(at : i)

java - 最大子和