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

如何在JavaScript中对数组内重复对象的属性值求和

解决方案:合并同类对象并累加属性值

核心实现代码

const mergeObjects = (arr) => {
  const resultMap = new Map();
  
  arr.forEach(obj => {
    const [key, value] = Object.entries(obj)[0];
    resultMap.set(key, (resultMap.get(key) || 0) + value);
  });
  
  return Array.from(resultMap, ([key, value]) => ({ [key]: value }));
};

// 测试示例
const laptops = [{acer: 4}, {mac: 5}, {asus: 8}, {acer: 6}, {mac: 3} ];
console.log(mergeObjects(laptops)); // 输出: [{acer: 10}, {mac: 8}, {asus: 8}]

方案说明

  1. 高效性:使用Map存储中间结果,查找和更新操作的时间复杂度为O(1),整体算法时间复杂度为O(n)(n为数组长度),处理大数据量时性能表现优异。
  2. 通用性:完全适配同类数组结构——只要数组中每个元素是仅含单个键值对的对象,无论键名是什么、数值类型是整数还是浮点数,都能正确合并累加。
  3. 简洁性:利用Object.entries快速提取对象的键值对,Array.from直接将Map转换为目标格式的数组,代码简洁易读。

边界情况处理

如果数组中存在空对象,代码会自动忽略;如果需要过滤非数字类型的数值,可以添加类型校验:

const mergeObjects = (arr) => {
  const resultMap = new Map();
  
  arr.forEach(obj => {
    const [key, value] = Object.entries(obj)[0];
    if (key && typeof value === 'number') {
      resultMap.set(key, (resultMap.get(key) || 0) + value);
    }
  });
  
  return Array.from(resultMap, ([key, value]) => ({ [key]: value }));
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:25:54