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

如何无需判断属性存在,使用+=给对象可能不存在的属性累加值?

无需判断属性存在性的分组累加实现方案

有两种符合需求的实现方式:

  • 方案1:使用Proxy代理对象实现默认值兜底,完全支持直接使用+=运算
    Proxy可以捕获对象的属性读取行为,当访问不存在的属性时默认返回0,从根源避免NaN问题,无需修改原有累加逻辑:
const myArray = [
  {date: 'date1', amount: 1},
  {date: 'date1', amount: 2},
  {date: 'date2', amount: 3},
  {date: 'date2', amount: 4},
]

// 代理对象,读取不存在的属性时默认返回0
const myObj = new Proxy({}, {
  get: (target, prop) => target[prop] ?? 0
})

myArray.forEach(arrayObj => {
  // 无需判断属性是否存在,直接+=即可
  myObj[arrayObj.date] += arrayObj.amount
})

console.log(myObj) // 输出 { date1: 3, date2: 7 }
  • 方案2:空值合并运算符兜底默认值,轻量化无显式分支判断
    如果不需要严格保留+=的写法,用??运算符对不存在的属性兜底默认值0即可,不会影响0、空字符串这类合法假值的运算,兼容性适配ES2020及以上环境:
const myObj = {}
myArray.forEach(arrayObj => {
  myObj[arrayObj.date] = (myObj[arrayObj.date] ?? 0) + arrayObj.amount
})

也可以和Array.reduce配合实现更简洁的聚合写法:

const myObj = myArray.reduce((acc, curr) => {
  acc[curr.date] = (acc[curr.date] ?? 0) + curr.amount
  return acc
}, {})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:09:02