以块的形式排序数组不起作用

时间:2018-04-04 09:13:22

标签: javascript

这似乎是一项简单的任务,但并不起作用。我有一个已知长度(比如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;
&#13;
&#13;

但后来意识到slice()可能会覆盖其输入,所以:

&#13;
&#13;
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;
&#13;
&#13;

但是仍然只创建了第一个块...我的错误在哪里?

4 个答案:

答案 0 :(得分:2)

尝试以下

&#13;
&#13;
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;
&#13;
&#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);