JavaScript中如何正确计算对象数组内的属性值总和
问题根源
你定义的object是由3个独立对象组成的数组,而非包含a、b、c三个属性的单个对象。直接访问object.a/object.b/object.c拿到的全是undefined,三个undefined相加结果为NaN,自然无法得到正确结果。
你当前的代码结构:
// 这是长度为3的数组,每个元素是一个只有单个属性的对象 let object = [{a:5},{b:10},{c:15}];
如果硬要在这个结构下用索引访问取值,写法是object[0].a + object[1].b + object[2].c,但这种写法冗余且不符合你最初的调用预期,本质是数据结构定义和使用方式不匹配。
修复方案
方案1:调整数据结构(匹配你预期的调用写法)
如果就是要通过对象.属性的形式直接拿三个值求和,去掉外层数组,直接定义为单个对象即可:
// 定义包含a、b、c三个属性的单个对象 const numObj = { a: 5, b: 10, c: 15 }; // 直接求和 const sum = numObj.a + numObj.b + numObj.c; console.log(sum); // 输出正确结果30
提示:不要用
object作为变量名,它和JS原生的Object构造函数重名,容易引发隐蔽bug,建议替换为有实际语义的名称。
方案2:保留数组结构的写法
如果你确实需要用数组存储这三个对象,可以通过遍历累加的方式计算总和:
const objArr = [{a:5},{b:10},{c:15}]; const sum = objArr.reduce((total, current) => { // 取出当前对象的属性值累加 return total + Object.values(current)[0]; }, 0); console.log(sum); // 输出30
内容的提问来源于stack exchange,提问作者Tripti Verma
相关产品推荐
相关产品推荐

