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

JS实现数组连续数字求和:以NaN为分隔符并跳过NaN

解决方案:以NaN为分隔符对连续数字段求和

核心注意点:判断NaN必须用Number.isNaN(),因为NaN === NaN的结果永远是false,这是很多人踩坑的地方。

方法一:使用reduce实现

const arr = [NaN, NaN, 1, 2, 3, NaN, NaN, 4, 5, 6, 7, NaN, 8, 9, 10, NaN, 100, 200, 300, 400, 500];

const res = arr.reduce((acc, curr) => {
  if (!Number.isNaN(curr)) {
    // 累加当前数字到结果数组的最后一项,无则新增
    acc.length ? (acc[acc.length - 1] += curr) : acc.push(curr);
  } else {
    // 遇到NaN时,仅当最后一项是有效数字才添加占位符,避免连续NaN干扰
    if (acc.length && !Number.isNaN(acc[acc.length - 1])) {
      acc.push(null);
    }
  }
  return acc;
}, []).filter(item => !Number.isNaN(item)); // 过滤占位符

console.log(res); // 输出:[6, 22, 27, 1500]

方法二:使用普通for循环实现

const arr = [NaN, NaN, 1, 2, 3, NaN, NaN, 4, 5, 6, 7, NaN, 8, 9, 10, NaN, 100, 200, 300, 400, 500];
const res = [];
let currentSum = null;

for (const num of arr) {
  if (!Number.isNaN(num)) {
    // 初始化或累加当前连续数字的和
    currentSum = currentSum !== null ? currentSum + num : num;
  } else {
    // 遇到NaN且有正在累加的和时,存入结果并重置
    if (currentSum !== null) {
      res.push(currentSum);
      currentSum = null;
    }
  }
}

// 处理数组末尾的连续数字段(若结尾不是NaN)
if (currentSum !== null) {
  res.push(currentSum);
}

console.log(res); // 输出:[6, 22, 27, 1500]

常见错误原因:

  • 用curr === NaN判断NaN,导致无法正确识别分隔符;
  • 未处理连续NaN的情况,导致结果数组出现空值或错误累加;
  • for循环结束后未处理最后一段非NaN数字,遗漏最后一组求和结果。

内容的提问来源于stack exchange,提问作者RGH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:20:37