JavaScript如何将布尔数组中连续true值分组为嵌套子数组
实现方案
核心逻辑
遍历原数组,过程中维护临时数组存储当前连续的true值:
- 遇到
true时,直接推入临时数组 - 遇到
false时,若临时数组不为空,就将临时数组推入结果数组,同时重置临时数组 - 遍历结束后额外检查一次临时数组,避免末尾的连续
true没有被推入结果数组
代码实现
方法1:使用reduce实现
const a = [false, true, true, false, true, false, false, false, true, true, false, true, true, true] const result = a.reduce((acc, curr) => { if (curr) { acc.current.push(curr) } else if (acc.current.length) { acc.output.push(acc.current) acc.current = [] } return acc }, { output: [], current: [] }) // 处理末尾剩余的连续true if (result.current.length) { result.output.push(result.current) } console.log(result.output) // [[true, true], [true], [true, true], [true, true, true]]
方法2:使用普通遍历实现
const a = [false, true, true, false, true, false, false, false, true, true, false, true, true, true] const res = [] let temp = [] for (const val of a) { if (val) { temp.push(val) } else if (temp.length) { res.push(temp) temp = [] } } // 收尾处理 if (temp.length) res.push(temp) console.log(res) // [[true, true], [true], [true, true], [true, true, true]]
两种方法都只需要遍历一次原数组,时间复杂度为O(n),性能最优。
内容的提问来源于stack exchange,提问作者Kiran Racherla
相关产品推荐
相关产品推荐

