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

JavaScript如何合并值相同对象的键,值不同则创建新对象

解决方案

逻辑调整说明

你原有代码的问题是仅对比最终数组的第一个元素,没有对所有已存在的分组做校验。我们可以先按has_been_done的取值做分组聚合,再转成目标格式,逻辑更清晰也能适配任意顺序的输入:

完整可运行代码

// 初始化临时分组对象:key为revision值的序列化结果,value为对应年份数组
const groupMap: Record<string, { years: string[], value: any }> = {};

// 遍历所有revision条目
carArray[0].revision.forEach(rev => {
  for (const [year, revisionValue] of Object.entries(rev)) {
    // 用序列化后的revision值作为分组唯一标识
    const valueKey = JSON.stringify(revisionValue);
    if (groupMap[valueKey]) {
      // 已有分组,追加年份
      groupMap[valueKey].years.push(year);
    } else {
      // 无分组,新建分组
      groupMap[valueKey] = {
        years: [year],
        value: revisionValue
      };
    }
  }
});

// 把分组转成目标格式的数组
const finalArray = Object.values(groupMap).map(group => {
  const yearKey = group.years.join(', ');
  return { [yearKey]: group.value };
});

输出说明

上述代码输出的finalArray就是你要求的结构:

[
  {"1980, 1985, 1995": {"has_been_done": "true"}},
  {"1990, 2000": {"has_been_done": "false"}}      
]

你给出的目标示例外层{ [ ... ] }属于非法JS语法,如果你确实需要外层包裹对象,只需要改成const result = { data: finalArray }即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:18:04