如何在JavaScript中按条件将数组拆分为多个子数组
用Array.reduce()拆分满足条件的数组
给定数组:
const arr = [1,2,3,4,5,6,7,8,25,26,27,28,29,50];
期望拆分结果:
[[1,2,3,4,5,6,7,8], [25,26,27,28,29], [50]]
直接用reduce就能实现需求,代码如下:
const arr = [1,2,3,4,5,6,7,8,25,26,27,28,29,50]; const result = arr.reduce((acc, current, index) => { if (index === 0) { acc.push([current]); return acc; } const lastSubArr = acc.at(-1); const lastNum = lastSubArr.at(-1); if (current - lastNum > 9) { acc.push([current]); } else { lastSubArr.push(current); } return acc; }, []); console.log(result);
逻辑说明
- 初始化累加器
acc为空数组,用来存储最终的子数组集合。 - 第一个元素直接创建新子数组加入
acc,因为没有前序元素可对比。 - 从第二个元素开始,取
acc中最后一个子数组的最后一个元素,和当前元素计算差值。 - 如果差值超过9,就新建一个包含当前元素的子数组加入
acc;没超过则把当前元素追加到最后一个子数组中。 - 每次循环返回
acc,最终得到拆分后的结果。
如果需要兼容递减数组,或者不管正负只要差值绝对值超过9就拆分,把判断条件改成Math.abs(current - lastNum) > 9即可。
内容的提问来源于stack exchange,提问作者Raihan Noval
相关产品推荐
相关产品推荐

