You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中通过迭代生成固定大小的连续子数组

如何用JavaScript生成指定大小的连续子数组

你当前的代码存在几个关键问题,导致无法得到预期结果:

  • 循环中每次直接覆盖resposta变量,最终只会保留最后一次slice的结果,而非收集所有子数组
  • slice的参数写死为2,5,没有根据循环变量动态调整起始位置
  • 循环条件i < a.length会导致循环执行过多无效次数,正确逻辑应该是每次步进指定的子数组大小

通用实现方案

我们可以编写一个支持指定子数组大小k的函数,核心逻辑如下:

  1. 初始化空数组存储最终结果
  2. 从索引0开始,每次步进k个位置
  3. 用slice(i, i + k)截取当前区间的子数组,添加到结果数组中
  4. 根据需求选择是否保留最后一组不足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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:35:19