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

如何在JavaScript中动态添加/更新对象属性?(对比PHP关联数组)

解决JavaScript中多维对象动态累加的问题

这个问题我太熟悉了!PHP里的关联数组确实贴心,会自动帮你处理多维结构的创建和数值累加,但JavaScript的普通对象可没这么“智能”——你之前的写法每次都直接把test[year]覆盖成新的单月份对象,自然只会保留最后一条数据,更别说累加了。

想要避免一堆繁琐的存在性判断,用ES6+的新语法就能轻松搞定,给你两种简洁的实现方式:

方式一:forEach循环实现

let test = {};
data.forEach(item => {
  const { year, month, amount } = item;
  // 确保当前年份对应的对象存在,不存在就初始化空对象
  test[year] ??= {};
  // 处理金额累加:如果该月份已有值就累加,没有就从0开始加
  test[year][month] = (test[year][month] ?? 0) + amount;
});

方式二:reduce函数式实现

如果你更喜欢函数式风格,用reduce来处理会更优雅:

const test = data.reduce((acc, { year, month, amount }) => {
  // 初始化年份对象
  acc[year] ??= {};
  // 累加对应月份的金额
  acc[year][month] = (acc[year][month] || 0) + amount;
  return acc;
}, {});

关键语法说明

  • ??=:逻辑空赋值运算符,只有当左侧的值为null或undefined时才会赋值,完美解决年份对象的初始化问题。
  • ??/||:空值合并运算符(或逻辑或),用来处理月份金额的初始值——如果该月份还没数据,就用0作为累加的起点。

这样写出来的代码和你PHP里的逻辑完全等价,最终会得到包含年份、月份及对应累计金额的结构,比如:

{ 
  "2018": { "5": 1110, "6": 690 }, 
  "2019": { "9": 354, "10": 531, "12": 567 }, 
  "2020": { "1": 444, "2": 100, "4": 200, "8": 1431 } 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:25:45