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

如何简洁实现JSON中metadata对象内所有整数属性求和?

简洁实现metadata属性值求和的方案

嘿,这问题挺典型的,不用逐个手动加属性值,我给你几个实用又简洁的方案:

方案1:Object.values() + Array.reduce()(最推荐)

这是现代JavaScript里最简洁高效的写法,两步搞定:

  1. 用Object.values()把metadata的所有属性值提取成数组
  2. 用reduce()方法对数组元素进行累加

代码示例:

const data = { metadata: { a: 0, b: 4, c: 1, d: 6 } };
const totalSum = Object.values(data.metadata).reduce((accumulator, currentValue) => accumulator + currentValue, 0);

console.log(totalSum); // 输出:11

注意:这里reduce的第二个参数0是累加初始值,必须加上——如果metadata是空对象,没有初始值会返回undefined,加上后会正确返回0。

方案2:带类型校验的求和(兼容非数值属性)

如果metadata里可能混入非数值类型的属性,我们可以在累加时加个类型判断,避免计算出错:

const data = { metadata: { a: 0, b: 4, c: '1', d: 6 } }; // 这里c是字符串
const totalSum = Object.values(data.metadata).reduce((acc, curr) => {
  return typeof curr === 'number' ? acc + curr : acc;
}, 0);

console.log(totalSum); // 输出:10(忽略了字符串类型的c)

方案3:for...in循环(手动控制型)

如果你更习惯传统循环写法,或者需要对遍历过程做更多自定义操作,for...in也是个可行选择:

const data = { metadata: { a: 0, b: 4, c: 1, d: 6 } };
let totalSum = 0;

for (const key in data.metadata) {
  // 用hasOwnProperty确保只遍历对象自身的属性(排除原型链上的属性)
  if (data.metadata.hasOwnProperty(key)) {
    totalSum += data.metadata[key];
  }
}

console.log(totalSum); // 输出:11

总结一下,日常开发里最优先选方案1,简洁又符合现代JS的写法;如果有特殊类型兼容需求就用方案2;方案3适合需要更精细控制遍历逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:42:32