无法读取未定义的多维数组

时间:2015-07-20 08:13:12

标签: javascript arrays

我正在尝试解决这个问题:编写一个将数组(第一个参数)拆分为大小长度(第二个参数)的函数,并将它们作为多维数组返回。例如:

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

应该返回

[['a'. 'b'], ['c', 'd']]

我的代码如下:

function chunk(arr, size) {
  var newArr = [[]];
  for(i = 0; i < arr.length; i++) {
    for(j = 0; j < size; j++) {
      newArr[i].push(arr[i + j]);
    }
  }
  return newArr;
}

它给出了一个错误:无法读取undefined的属性'push'。为什么会发生这种情况?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

for(i = 0; i < arr.length; i++) {

你必须初始化一维数组:

newArr[i] = [];

这将解决错误,但不会产生您想要的结果。我想你需要这样的东西:

for (i = 0; i < ceil(arr.length / size); i++) {
    newArr[i] = [];
    for (j = 0; j < size; j++) {
        if (i * size + j >= arr.length)
            break;
        newArr[i].push(arr[i * size + j]);
    }
}

答案 1 :(得分:1)

您可以使用嵌套循环执行此操作,但为什么不采用更简单的方法并使用array.slice()

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