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
相关产品推荐
相关产品推荐

