You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:05:26