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

Angular TypeScript中如何合并JSON数组内重复对象的指定键值

Angular + TypeScript 实现同标识对象数组合并、差异字段值拼接

实现思路

核心用Array.reduce做分组聚合:

  • 选择组内值完全一致的唯一标识字段(本场景为song_id)作为分组键
  • 遍历原数组时,若分组中不存在当前键对应的条目,直接存入分组;若已存在对应条目,将差异字段(本场景为artist_name)的值用逗号拼接更新
  • 聚合完成后提取分组Map的所有值,即为目标数组

可直接运行的代码示例

// 原数组定义
this.oldArray = [
  {"song_id": 11, "artist_name": "Arijit", "song_name": "Song1"},
  {"song_id": 11, "artist_name" : "Shreya", "song_name": "Song1"},
  {"song_id": 12,"artist_name": "Jason", "song_name": "Song2"},
  {"song_id": 12,"artist_name": "Ankit", "song_name": "Song2"},
  {"song_id": 13,"artist_name": "Asha", "song_name": "Song3"},
  {"song_id": 13,"artist_name": "Lata", "song_name": "Song3"},
  {"song_id": 13,"artist_name": "Bapi", "song_name": "Song3"},
];

// 合并逻辑
this.newArray = Object.values(
  this.oldArray.reduce((groupAcc, curItem) => {
    const groupKey = curItem.song_id;
    // 分组中无当前歌曲条目时直接初始化
    if (!groupAcc[groupKey]) {
      groupAcc[groupKey] = { ...curItem };
      return groupAcc;
    }
    // 存在同组条目时拼接差异的艺术家字段
    groupAcc[groupKey].artist_name += `, ${curItem.artist_name}`;
    return groupAcc;
  }, {} as Record<number, {song_id: number, artist_name: string, song_name: string}>)
);

扩展说明

如果业务场景中差异字段不固定,不需要硬编码拼接字段名,可以在遍历过程中自动对比同组对象的所有键值,非唯一标识字段、且同组值存在差异的自动做拼接,适配更多同类合并场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:39:19