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

向数组添加重复标识对象时合并属性值的实现方法

实现思路

核心逻辑是新增对象前先校验数组中是否存在同标识的对象,存在则累加属性,不存在则直接插入:

  • 先定义对象的唯一标识字段,这类股票场景的标识字段通常为symbol
  • 插入新对象前遍历数组,匹配相同标识的已有对象
  • 匹配成功则累加fees、amount两个属性值,无需新增元素
  • 匹配失败则直接将新对象推入数组,保证唯一标识对应的对象全局唯一
代码实现(JavaScript 示例)
// 示例原数组
const stockList = [
  { symbol: 'AAPL', fees: 23.5, amount: 10 },
  { symbol: 'TSLA', fees: 12.8, amount: 7 }
]

/**
 * 新增/更新股票对象
 * @param {Array} list 原股票数组
 * @param {Object} newStock 新增的股票对象
 */
function addOrUpdateStock(list, newStock) {
  // 查找同标识的已有对象
  const existStock = list.find(item => item.symbol === newStock.symbol)
  if (existStock) {
    // 存在则累加对应属性
    existStock.fees += newStock.fees
    existStock.amount += newStock.amount
  } else {
    // 不存在则直接插入
    list.push(newStock)
  }
}

// 测试:新增AAPL对象
const newAapl = { symbol: 'AAPL', fees: 10, amount: 5 }
addOrUpdateStock(stockList, newAapl)
console.log(stockList)
// 输出中AAPL对象为 { symbol: 'AAPL', fees: 33.5, amount: 15 },无重复AAPL对象
扩展说明

如果需要适配任意标识、任意累加字段,可以把标识字段名、累加字段列表作为参数传入函数,提升通用性:

function addOrMergeItem(list, newItem, uniqueKey, mergeKeys) {
  const existItem = list.find(item => item[uniqueKey] === newItem[uniqueKey])
  if (existItem) {
    mergeKeys.forEach(key => {
      existItem[key] = (existItem[key] || 0) + (newItem[key] || 0)
    })
  } else {
    list.push(newItem)
  }
}
// 调用示例:按symbol为唯一标识,累加fees、amount
addOrMergeItem(stockList, newAapl, 'symbol', ['fees', 'amount'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:27:00