
本文介绍一种不依赖正则表达式、高效且易理解的方法,将一维数字数组中所有连续的零子序列提取为独立的一维数组,并组合成二维数组。
本文介绍一种不依赖正则表达式、高效且易理解的方法,将一维数字数组中所有连续的零子序列提取为独立的一维数组,并组合成二维数组。
在实际开发中,我们常需从线性数据中识别并分组连续的特定值(如 0)。原问题给出数组 [1, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 5, 6],目标是提取出所有连续的零段,并以二维数组形式返回,例如 [[0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]] —— 每个子数组代表一段连续零,且元素类型为数字 0(而非字符串 "0"),完全避免正则表达式。
下面是一个清晰、健壮、可读性强的实现方案:
function zeroGroups(arr) {
const result = [];
let currentGroup = [];
for (let i = 0; i 0) {
result.push(currentGroup);
currentGroup = [];
}
// 若 currentGroup 为空(如开头就是非零),直接跳过
}
}
// 循环结束后,检查末尾是否还有未保存的零段
if (currentGroup.length > 0) {
result.push(currentGroup);
}
return result;
}
// 测试
console.log(zeroGroups([1, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 5, 6]));
// 输出: [[0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
✅ 关键设计说明:
- 使用单次遍历(O(n) 时间复杂度),空间开销仅用于结果存储;
-
currentGroup动态累积当前连续零序列,遇非零即触发“提交+重置”; - 循环结束后必须显式检查
currentGroup,否则末尾连续零会被遗漏(如输入[0, 0, 1]); - 所有元素均为原始数字
0,无类型转换或字符串中间态,语义准确。
⚠️ 注意事项:
- 该函数对
0做严格全等判断(===),确保不会误匹配false、null或空字符串; - 若输入为空数组
[],返回空二维数组[]; - 若输入不含
0,返回[](无零段); - 不修改原数组,符合函数式编程的不可变原则。
此方法简洁、可维护、无副作用,适用于各类前端与 Node.js 场景,是处理“连续值分组”问题的经典范式。











