如何使用JavaScript将数组中大于2的连续元素分组为子数组
正确实现代码
你可以直接使用如下reduce版本的实现,输出完全符合要求:
const A = [1,2,3,5,6,7,8,10,0,1,1,2,4,10,6,7,3]; const result = A.reduce((acc, curr) => { // 遇到2就新建子数组,作为分组的起始 if (curr === 2) { acc.push([curr]); return acc; } const lastSubArray = acc.at(-1); // 存在正在收集的子数组,且当前元素大于2就加入分组 if (lastSubArray && curr > 2) { lastSubArray.push(curr); } return acc; }, []); console.log(result); // 输出:[[2,3,5,6,7,8,10],[2,4,10,6,7,3]]
原代码的问题说明
你写的代码存在几个明显的逻辑问题:
- reduce初始值为空数组,第一次遍历取
acc[acc.length - 1]会得到undefined,访问lastSubArray[lastSubArray.length - 1]直接报错 - 没有处理新建子数组的触发逻辑,规则里分组都是以2为起始,你没有对应的判断
- 逻辑冲突:你同时写了满足条件时
acc.push(current)和无条件acc[acc.length - 1].push(current),会导致元素重复添加,也不符合分组规则
内容的提问来源于stack exchange,提问作者Uday Kumar Naidu Galidevara
相关产品推荐
相关产品推荐

