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

JavaScript数组对象按键去重后对对应value值求和实现方法咨询

按对象key去重后求和的实现方式

你当前的求和逻辑未添加key维度的去重判断,会累计所有15个条目的value,最终得到结果75,和业务预期存在偏差。只需要在求和前完成按key的唯一值筛选,即可得到正确结果。

方案1:单次遍历完成去重+求和(性能优先)

该方案不需要生成额外的中间去重数组,仅遍历一次原数组就能完成全流程计算,适合数据量较大的场景。实现逻辑为遍历过程中用Set存储已经累计过的key,遇到未计数的新key时才累加对应value,已存在的key直接跳过。

const sumOfValue = array.reduce((acc, item) => {
  // 初始化结构:acc中存储已计数的key集合、累计和
  if (!acc.seenKeys) acc.seenKeys = new Set();
  if (!acc.sum) acc.sum = 0;
  
  if (!acc.seenKeys.has(item.key)) {
    acc.seenKeys.add(item.key);
    acc.sum += item.value;
  }
  return acc;
}, {}).sum;

针对你给出的示例数组,该代码运行后得到的结果为15,和预期一致。

方案2:先去重后求和(逻辑易读)

该方案拆分为两步执行,代码可读性更高,更适合中小型数据量的业务场景:

  • 借助Map结构按key完成去重,自动过滤同key的重复条目
  • 对去重后的数组执行value求和
// 第一步:基于key生成Map,同key的条目会自动覆盖,实现去重
const uniqueList = Array.from(new Map(array.map(item => [item.key, item])).values());
// 第二步:对去重后的数组求和
const sumOfValue = uniqueList.reduce((prev, curr) => prev + curr.value, 0);

注意:上述去重逻辑默认同一个key对应的value值是统一的,和你的示例场景匹配;如果业务中存在同一个key对应不同value的情况,需要提前明确规则(保留首次出现/最后一次出现的value),再调整去重的取值逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 01:45:08