我的例子:
let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
let slice = (source, index) => source.slice(index, index + 4);
let length = arr.length;
let index = 0;
let result = [];
while (index < length) {
let temp = slice(arr, index);
result.push(temp);
index += 4;
}
console.log(result);
日志记录:
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18]]
我想将数组切成每4个项[1,2,3,4] [5,6,7,8]...
代码工作正常。
我有两个问题:
1 /。有没有其他方法可以通过使用内联代码来做到这一点?例如:result = arr.slice(...)
2 /。在我定义:
之后let push = result.push;
为什么我还不能使用:
push(temp)
错误讯息:
未捕获TypeError:在null或undefined
上调用Array.prototype.push
更新:我已根据答案更新了解决方案。希望它有用。
let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
let result = [];
arr.forEach((x,y,z) => !(y % 4) ? result.push(z.slice(y, y + 4)) : '');
console.log(result);
日志记录:
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18]]
答案 0 :(得分:1)
一种简单的方法
var chunckArray = function(array, chunkCount){
var chunks = [];
while(array.length){
chunks.push(array.splice(0, chunkCount);
}
return chunks;
}
非消费方式:
var chunckArray = function(array, chunkCount){
var chunks = [], i, j;
for (i = 0, j = array.length; i<j; i+= chunkCount) {
chunks.push(array.slice(i, i + chunkCount);
}
return chunks;
}
答案 1 :(得分:1)
我使用简单的reduce(请参阅plnkr)
完成此操作let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
var counter = -1;
var result = arr.reduce((final, curr, i) => {
if (i % 4 === 0) {
final.push([curr])
counter++;
} else {
final[counter].push(curr);
}
return final;
}, []);
console.log(result);
您可以调整4
并将其替换为变量chuckSize
,这样您就可以重新应用其他内容了 - 您也可以将其包含在带参数(array, chunkSize)
的函数中如果你想
答案 2 :(得分:1)
你也可以使用for循环来实现它,它会给你相同的结果:
let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
console.log(arr.length);
var result=[];
for(var i = 0; i < arr.length; i+=4) {
result=arr.slice(i, i+4);
console.log(result);
}