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

按year键合并对象数组,解决worksSummaryDetailsObj数据错误问题

按年份合并对象数组的解决方案

原始数组

var worksSummaryDetailsArr = [
  {
    year: 2020,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object] ]
  },
  {
    year: 2021,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object] ]
  },
  {
    year: 2022,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object] ]
  },
  {
    year: 2021,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object] ]
  },
  {
    year: 2022,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object] ]
  }
]

期望合并结果

[
  {
    year: 2020,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object] ]
  },
  {
    year: 2021,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object],[Object], [Object], [Object], [Object] ]
  },
  {
    year: 2022,
    worksSummaryDetailsObj: [ [Object], [Object], [Object], [Object],[Object], [Object], [Object], [Object] ]
  }
]

你的代码问题分析

当前代码的核心错误是:worksSummaryDetailsObj 直接将过滤后的整个对象数组放入Set,而没有合并每个对象内部的worksSummaryDetailsObj数组。另外,Set用于对象去重在这里完全多余,反而会导致结构错误。

正确解决方案

方法1:使用reduce(简洁易懂)

const mergedArr = worksSummaryDetailsArr.reduce((acc, current) => {
  const existingItem = acc.find(item => item.year === current.year);
  if (existingItem) {
    // 合并数组
    existingItem.worksSummaryDetailsObj = [...existingItem.worksSummaryDetailsObj, ...current.worksSummaryDetailsObj];
  } else {
    // 添加新条目
    acc.push({
      year: current.year,
      worksSummaryDetailsObj: [...current.worksSummaryDetailsObj]
    });
  }
  return acc;
}, []);

console.log(mergedArr);

方法2:使用对象映射(性能更优)

当处理大数据量数组时,find方法会带来O(n²)的时间复杂度,用对象做中间映射可以将时间复杂度降到O(n):

const yearMap = {};
worksSummaryDetailsArr.forEach(item => {
  if (!yearMap[item.year]) {
    yearMap[item.year] = {
      year: item.year,
      worksSummaryDetailsObj: [...item.worksSummaryDetailsObj]
    };
  } else {
    yearMap[item.year].worksSummaryDetailsObj.push(...item.worksSummaryDetailsObj);
  }
});
const mergedArr = Object.values(yearMap);

console.log(mergedArr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:03:18