对象属性值求和应先转数字再累加,推荐用Object.values().filter().reduce组合,确保跳过NaN和非有限数,避免字符串拼接或计算中断。

如果对象的属性值全是数字,可以用 Object.keys(obj) 获取所有键名,再用 reduce 遍历累加对应的值。
确保值是数字类型
直接对属性值求和前,要确认它们确实是数字(不是字符串、null 或 undefined),否则容易得到 "123" 这样的拼接结果或 NaN。
- 可用
Number(val)或一元加号+val转换 - 建议加上
isNaN()判断,跳过非数值项 - 例如:
obj = { a: "1", b: 2, c: null, d: "3.5" },只应计入 1、2 和 3.5
基础写法:Object.keys + reduce
这是最常用的组合方式:
const obj = { x: 10, y: 20, z: 30 };
const sum = Object.keys(obj).reduce((acc, key) => acc + Number(obj[key]), 0);
// 结果:60
说明:Object.keys(obj) 返回 ["x", "y", "z"];reduce 每次取一个 key,读取 obj[key] 并转为数字后加到累加器 acc 上。
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
更健壮的写法(过滤非数字)
避免因无效值导致 NaN 中断计算:
const sum = Object.keys(obj).reduce((acc, key) => {
const val = obj[key];
const num = Number(val);
return isNaN(num) ? acc : acc + num;
}, 0);
也可以用可选链和空值合并简化判断(适合现代环境):
const sum = Object.keys(obj).reduce((acc, key) => {
const num = +obj[key];
return Number.isFinite(num) ? acc + num : acc;
}, 0);
替代方案:Object.values + reduce(更直观)
如果只关心值,不依赖键名,用 Object.values() 更直接:
<code>const sum = Object.values(obj) .filter(val => Number.isFinite(+val)) .reduce((acc, val) => acc + +val, 0);
这样省去通过 key 查找 value 的步骤,逻辑更线性,可读性略高。

















