这似乎是一项简单的任务,但并不起作用。我有一个已知长度(比如9)和一个块大小(比如3)的数组。数组总是可以被该块分割,无需测试。起初尝试过:
const chunked = [];
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for(let i=0; i<3; i++) {
chunked[i] = arr.slice(i*3, 3);
}
console.log(chunked);
&#13;
但后来意识到slice()
可能会覆盖其输入,所以:
const chunked = [];
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for(let i=0; i<3; i++) {
let temp = arr.slice();
chunked[i] = temp.slice(i*3, 3);
}
console.log(chunked);
&#13;
但是仍然只创建了第一个块...我的错误在哪里?
答案 0 :(得分:2)
尝试以下
const chunked = [];
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for(let i=0; i<3; i++) {
let temp = arr.slice();
chunked[i] = temp.slice(i*3, (i+1)*3); // Need to set appropriate begin and end
}
console.log(chunked);
&#13;
供参考,Array.slice
答案 1 :(得分:2)
slice()方法返回数组部分的浅表副本 到从开始到结束选择的新数组对象(不包括结束)。 原始数组不会被修改。
arr.slice([begin[, end]])
您可以从0循环到数组的长度,并按chunck大小递增。
像:
const chunked = [];
const chuckSize = 3;
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for (let i = 0; i < arr.length; i += chuckSize) {
chunked.push(arr.slice(i, i + chuckSize));
}
console.log(chunked);
答案 2 :(得分:0)
slice
的第二个参数是您可能假设的结束索引(不是长度)。您可以找到文档here
答案 3 :(得分:0)
函数slice
将参数设为slice(firstIndex, lastIndex + 1)
请使用以下代码:
const chunked = [];
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for(let i=0; i<3; i++) {
chunked[i] = arr.slice(i*3, i*3 + 3);
}
console.log(chunked);