如何在JavaScript中按连续5个零拆分数组并丢弃零值?
JavaScript实现按连续5个零拆分数组并丢弃零值
需求说明
给定输入数组:
const input = [0,0,0,0,0,12,34,45,34,65,76,33,66,76,44,32,99,0,0,0,0,0,43,23,54,33,44,22,66,0,0,0,0,0];
需要以连续5个零为分隔条件拆分原数组,同时丢弃这些零值,最终得到如下子数组:
// 输出结果 [[12,34,45,34,65,76,33,66,76,44,32,99],[43,23,54,33,44,22,66]]
实现方案
方案一:遍历数组(直观可控)
通过遍历数组,维护当前非零组和连续零的计数,遇到连续5个零时完成一次拆分:
const input = [0,0,0,0,0,12,34,45,34,65,76,33,66,76,44,32,99,0,0,0,0,0,43,23,54,33,44,22,66,0,0,0,0,0]; function splitByFiveZeros(arr) { const result = []; let currentGroup = []; let zeroCount = 0; for (const num of arr) { if (num === 0) { zeroCount++; // 连续零达到5个时,将当前非零组存入结果(如果有内容) if (zeroCount === 5) { currentGroup.length && result.push(currentGroup); currentGroup = []; zeroCount = 0; // 重置计数,避免后续零重复触发拆分 } } else { // 遇到非零值,重置零计数并加入当前组 zeroCount = 0; currentGroup.push(num); } } // 处理数组末尾剩余的非零组 currentGroup.length && result.push(currentGroup); return result; } console.log(splitByFiveZeros(input));
方案二:字符串转换(简洁高效)
利用数组转字符串的特性,用连续5个零的字符串作为分隔符拆分,再转回数字数组:
const input = [0,0,0,0,0,12,34,45,34,65,76,33,66,76,44,32,99,0,0,0,0,0,43,23,54,33,44,22,66,0,0,0,0,0]; function splitByFiveZeros(arr) { return arr.join(',') .split(',0,0,0,0,0,') // 用连续5个零的字符串作为分隔符 .map(str => str.split(',').filter(Boolean).map(Number)) // 转换为数字数组并过滤空内容 .filter(group => group.length > 0); // 移除空组(如开头/结尾零拆分出的空内容) } console.log(splitByFiveZeros(input));
内容的提问来源于stack exchange,提问作者Mohammad Nuseirat
相关产品推荐
相关产品推荐

