JavaScript如何提取数组中满足条件的连续元素并分组
问题描述
给定测试数组:
[500, 250, 380, 250, 230, 100, 700, 900, 200, 100, 10, 800, 5]
需要实现逻辑:提取数组中所有值小于等于350的元素,仅保留连续相邻的满足条件的元素,按连续段分组,期望返回结果为:
[[250], [250, 230, 100], [200, 100, 10], [5]]
原有代码的核心问题:
- 没有定义存储当前连续片段的临时变量,无法区分不同的连续分组
- 判断逻辑存在缺陷,仅校验当前元素和下一个元素同时满足条件的场景,既会漏掉每个连续段的最后一个元素,也无法在连续段中断时完成分段存储。
实现方案
核心思路是遍历过程中持续累积符合条件的元素到临时片段,遇到不符合条件的元素时,就把当前累积的非空片段存入最终结果,再清空临时片段重新累积;遍历结束后需要额外处理数组末尾残留的连续片段,避免漏存。
const array = [500, 250, 380, 250, 230, 100, 700, 900, 200, 100, 10, 800, 5] const result = [] // 临时存储当前正在遍历的连续符合条件的片段 let currentSegment = [] array.forEach(item => { if (item <= 350) { currentSegment.push(item) return } // 遇到不符合条件的元素,若当前有累积的片段就存入结果 if (currentSegment.length) { result.push(currentSegment) currentSegment = [] } }) // 处理数组末尾最后一段符合条件的元素 if (currentSegment.length) { result.push(currentSegment) }
运行上述代码即可得到预期的分组结果。
内容的提问来源于stack exchange,提问作者Le Rilleur
相关产品推荐
相关产品推荐

