如何在JavaScript中通过迭代生成固定大小的连续子数组
如何用JavaScript生成指定大小的连续子数组
你当前的代码存在几个关键问题,导致无法得到预期结果:
- 循环中每次直接覆盖
resposta变量,最终只会保留最后一次slice的结果,而非收集所有子数组 slice的参数写死为2,5,没有根据循环变量动态调整起始位置- 循环条件
i < a.length会导致循环执行过多无效次数,正确逻辑应该是每次步进指定的子数组大小
通用实现方案
我们可以编写一个支持指定子数组大小k的函数,核心逻辑如下:
- 初始化空数组存储最终结果
- 从索引0开始,每次步进
k个位置 - 用
slice(i, i + k)截取当前区间的子数组,添加到结果数组中 - 根据需求选择是否保留最后一组不足
k的元素
只保留完整长度的子数组
function splitIntoChunks(arr, k) { const result = []; // 循环条件确保每次都能取到k个元素 for (let i = 0; i <= arr.length - k; i += k) { result.push(arr.slice(i, i + k)); } return result; } // 测试示例 console.log(splitIntoChunks([1, 2, 3, 4, 5, 6, 7, 8, 9], 3)); // 输出: [[1,2,3],[4,5,6],[7,8,9]] console.log(splitIntoChunks([2, 37, 8, 9, 23, 34, 44], 3)); // 输出: [[2,37,8],[9,23,34]]
保留剩余不足k的元素
如果需要保留最后一组长度不足k的元素,只需调整循环条件:
function splitIntoChunksWithRemainder(arr, k) { const result = []; for (let i = 0; i < arr.length; i += k) { result.push(arr.slice(i, i + k)); } return result; } console.log(splitIntoChunksWithRemainder([2, 37, 8, 9, 23, 34, 44], 3)); // 输出: [[2,37,8],[9,23,34],[44]]
对你原有代码的修正
如果要修改你自己的函数,调整如下:
function ub(a) { let resposta = []; // 子数组大小设为3,每次步进3 for (let i = 0; i <= a.length - 3; i += 3) { resposta.push(a.slice(i, i + 3)); } return resposta; } console.log(ub([2, 37, 8, 9, 23, 34, 44])); // 输出: [[2,37,8],[9,23,34]]
内容的提问来源于stack exchange,提问作者Kerpen rodrigo rosa de miranda
相关产品推荐
相关产品推荐

