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

JavaScript如何将数组中连续偶数分组生成二维数组?

连续偶数分组实现方案

核心思路

你判断的方向没错,reduce非常适合做这类需要遍历过程中维护状态的分组操作,核心逻辑如下:

  • 给reduce设置初始值为空数组,用来存储最终的分组结果
  • 遍历每个元素时,先判断当前元素是否为偶数:
    • 如果是奇数,直接跳过不处理,不改动累积结果
    • 如果是偶数,再判断两种情况:如果是数组第一个元素,或者前一个元素是奇数,说明当前是连续偶数段的开头,新建一个包含当前数的分组塞进结果;如果前一个元素也是偶数,说明还在同一段连续偶数里,直接把当前数追加到结果的最后一个分组中
  • 你之前用map实现不了的原因是:map是元素一对一映射的方法,没法维护跨元素的连续状态判断,不适合这类分组场景。

参考代码

const nums = [10, 12, 23, 17, 14, 15, 50, 72, 26, 33];
const result = nums.reduce((acc, cur, index) => {
  // 当前元素是偶数才处理
  if (cur % 2 === 0) {
    // 判断是否是新的连续偶数段开头:第一个元素/前一个是奇数
    if (index === 0 || nums[index - 1] % 2 !== 0) {
      acc.push([cur]);
    } else {
      // 属于当前连续段,追加到最后一个分组
      acc[acc.length - 1].push(cur);
    }
  }
  return acc;
}, []);

console.log(result);
// 输出:[ [ 10, 12 ], [ 14 ], [ 50, 72, 26 ] ]

补充说明

如果不想依赖原数组取上一个元素,也可以在reduce的累积值里同时维护分组结果和上一个元素的奇偶标记,逻辑是完全一致的,上面的写法更简洁直观。

内容的提问来源于stack exchange,提问作者justcode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:51:09