在JS中通过所需的组大小将一维数组转换为多维数组的更好方法

时间:2015-08-07 19:12:34

标签: javascript arrays multidimensional-array

我对JS很新,我正在研究一个问题,要求将数组(第一个参数)拆分为大小的长度(第二个参数)并将它们作为多维数组返回。 我得到的问题是适用于所有测试用例,但它建议使用数组`push()`方法。我多次尝试过,无法让它正常工作。我想我已经搞砸了数组作为参考。我最终为每个元素声明了一个新的Array。我一次使用更经典的深层复制每个元素。我没有回去再次尝试`push()`方法。必须有一种更有效的方法来做到这一点。我想写好代码。很想看到更好的版本。 谢谢!

function chunk(arr, size) {

    var group = 0;
    var counter = 0;
    var even = false;
    var odd = false;

    if (arr.length % size === 0) {
        group = arr.length / size;
        even = true;
    } else {
        group = Math.ceil(arr.length / size);
        odd = true;
    }

    var newArr = new Array(group);

    for (var i = 0; i < group; i++) {
        newArr[i] = new Array(size);
    }

    for (i = 0; i < group; i++) {
        for (var j = 0; j < size && counter < arr.length; j++) {
            newArr[i][j] = arr[counter++];
        }

    }

    return newArr;
}

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

2 个答案:

答案 0 :(得分:4)

使用Array.prototype.slice,可以用更短的方式编写函数:

function chunk(array, size) {
  var result = []
  for (var i=0;i<array.length;i+=size)
    result.push( array.slice(i,i+size) )
  return result
  }

答案 1 :(得分:-1)

您可以尝试Array对象中的切片方法。以下是关于如何使用它的想法。

var arr = [1, 2, 3, 4, 5, 6];
var newArr = [];
newArr.push(arr.slice(0, arr.length / 2));
newArr.push(arr.length / 2, arr.length);

这只是一个浅薄的实现,但您可以在更好的书写函数中使用相同的概念。

这是一个示例函数:

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];

function toChunks(arr, size) {
  var i = 0,
      chunks = [];

  for (; i < arr.length; i += size) {
      chunks.push(arr.slice(i, i + size););
  }

  return chunks;
}

toChunks(arr, 2);