未捕获的TypeError:无法读取未定义的属性'push'。应该做什么?

时间:2016-06-14 19:54:21

标签: javascript

我收到以下错误

  

“未捕获的TypeError:无法读取未定义的属性'push'”

当我尝试运行以下代码时:

function chunkArrayInGroups(arr, size) {
  // Break it up.

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

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

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

而不是

arr_final[j].push(arr[i]);

做类似

的事情
arr_final.push(arr[i]);

答案 1 :(得分:0)

您忘记使用空数组初始化每个块。更正了以下代码:

function chunkArrayInGroups(arr, size) {
  // Break it up.

  var arr_final=[[]]; // <-- initialize chunk
  for(var i=0,j=0;i<arr.length;i++)
  {
    arr_final[j].push(arr[i]);
    if(i===size)
    {
      arr_final.push([]); // <-- initialize chunk
      j++;
    }
  }
  return arr_final;
}

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

我猜你的分块逻辑也有错误,所以你真正想要的是:

function chunkArrayInGroups(arr, size) {
  // Break it up.

  var arr_final=[];
  for(var i=0,j=-1;i<arr.length;i++)
  {
    if (i % size === 0) {
      arr_final.push([]);
      j++;
    }
    arr_final[j].push(arr[i]);
  }
  return arr_final;
}

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

答案 2 :(得分:0)

为了将输入数组拆分为多个长度≤大小的块,每次迭代器变量arr_final.push([])达到i的倍数时,需要初始化一个新的空块size - - 您可以通过模运算符检查:

function chunkArrayInGroups(arr, size) {
  // Break it up.

  var arr_final = [];
  for (var i = 0, j = -1; i < arr.length; ++i) {
    if (i % size == 0) {
      arr_final.push([]);
      j++;
    } 
    arr_final[j].push(arr[i]);
  }
  return arr_final;
}

console.log(chunkArrayInGroups(["a", "b", "c", "d", "e"], 3));