我正在尝试解决这个问题:编写一个将数组(第一个参数)拆分为大小长度(第二个参数)的函数,并将它们作为多维数组返回。例如:
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'。为什么会发生这种情况?我该如何解决这个问题?
答案 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;
}