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

使用reduce方法累加对象数组a属性值时返回NaN,求问题原因及解决办法

问题分析与解决方案

你的代码确实存在问题,导致输出NaN的原因是:数组中部分对象没有a属性,此时item.a会返回undefined,而undefined与数字相加的结果就是NaN,一旦出现NaN,后续所有累加都会保持NaN。

要实现仅对包含a键的元素求和,有两种常用方案:

方案一:在reduce中直接判断属性是否存在

const numbers = [{ a: 1 }, { a: 6 }, { a: 3 }, { d: 4 }, { e: 5 }, { f: 5 }];

const filterNumbers = numbers.reduce((currenttotal, item) => {
  // 仅当对象包含a属性时才累加
  return 'a' in item ? item.a + currenttotal : currenttotal;
}, 0);
console.log(filterNumbers); // 输出 10

这里用'a' in item判断对象是否包含a属性,也可以用item.hasOwnProperty('a'),区别是前者会检查原型链,后者只检查自身属性,根据你的场景选择即可。

方案二:先过滤再求和

const numbers = [{ a: 1 }, { a: 6 }, { a: 3 }, { d: 4 }, { e: 5 }, { f: 5 }];

const filterNumbers = numbers
  .filter(item => 'a' in item) // 先筛选出含a属性的对象
  .reduce((currenttotal, item) => item.a + currenttotal, 0);
console.log(filterNumbers); // 输出 10

这种方式代码逻辑更直观,可读性更强,适合复杂场景下的逻辑拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:15