对象属性值求和应先转数字再累加,推荐用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开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
更健壮的写法(过滤非数字)
避免因无效值导致 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);</code>
这样省去通过 key 查找 value 的步骤,逻辑更线性,可读性略高。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










