数组按指定大小分块无法实现的技术求助
解决数组分块的问题
嘿,我来帮你排查这个数组分块的问题~ 核心问题出在你对slice()方法的参数理解上,咱们一步步来梳理:
你的原代码问题分析
你最初的代码里写了:
chunked[i] = arr.slice(i*3, 3);
这里slice(start, end)的第二个参数是结束索引(不包含),不是截取的长度。所以当i=0时,slice(0,3)能拿到[1,2,3]没问题;但i=1时,slice(3,3)会返回空数组(因为开始索引等于结束索引);i=2时slice(6,3)甚至会因为结束索引小于开始索引,直接返回空数组,这就是结果不对的原因。
正确的实现方式
你只需要把slice的第二个参数改成i*chunkSize + chunkSize(或者说(i+1)*chunkSize),就能正确截取每一段了。另外,循环次数可以用数组长度除以分块大小,不用硬写数字,更灵活:
const chunked = []; const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const chunkSize = 3; // 循环次数是数组长度除以分块大小 for(let i=0; i < arr.length / chunkSize; i++) { const start = i * chunkSize; // 截取从start到start+chunkSize的元素 chunked.push(arr.slice(start, start + chunkSize)); } console.log(chunked); // 输出 [[1,2,3], [4,5,6], [7,8,9]]
额外的优雅写法(可选)
如果你想更简洁,也可以用数组的reduce方法来实现:
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const chunkSize = 3; const chunked = arr.reduce((result, _, index) => { // 每到分块大小的倍数位置,就截取一段 if (index % chunkSize === 0) { result.push(arr.slice(index, index + chunkSize)); } return result; }, []); console.log(chunked);
内容的提问来源于stack exchange,提问作者buzz
相关产品推荐
相关产品推荐

