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

如何合并数组中name和expenseType相同的对象并累加amount值

实现思路

  • 构造一个临时对象作为缓存,以name + '|' + expenseType作为唯一键(用分隔符避免两个字段直接拼接产生内容冲突)
  • 遍历原数组的每一项,匹配缓存中是否存在对应键的记录:
    • 存在:直接累加对应amount值
    • 不存在:将当前对象拷贝后存入缓存
  • 最终把缓存对象的所有值提取为数组,即可得到目标结果

完整实现代码

let arrPeople = [
  {name: "Jack", expenseType: "food", amount: 50},
  {name: "Kate", expenseType: "food", amount: 60},
  {name: "Rob", expenseType: "transportation", amount: 15},
  {name: "Jack", expenseType: "food", amount: 40},
  {name: "Kate", expenseType: "transportation", amount: 20},
  {name: "Jack", expenseType: "miscellaneous", amount: 30},
  {name: "Rob", expenseType: "transportation", amount: 15}
]

const cache = {}
arrPeople.forEach(item => {
  // 生成唯一匹配键
  const uniqueKey = `${item.name}|${item.expenseType}`
  if (cache[uniqueKey]) {
    cache[uniqueKey].amount += item.amount
  } else {
    // 拷贝对象存入缓存,避免修改原数组内容
    cache[uniqueKey] = {...item}
  }
})

const newArr = Object.values(cache)
console.log(newArr)

结果验证

运行代码后得到的newArr和你给出的预期输出完全一致,且对象顺序和原数组中首次出现的顺序保持匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:54:02