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

如何修改合并函数实现title为对象类型的两个数组去重合并

问题原因

你原有代码的问题在于 Map 对对象类型的key是按引用匹配的,两个内容完全一致但引用不同的title对象会被识别为两个不同的key,因此无法触发合并逻辑。

解决方案

可以将title对象序列化为字符串作为Map的唯一key,只要title对象的内容完全一致就会被判定为同一分组,修改后的代码如下:

merged = (data1, data2) => {
  let arr = data1.concat(data2);
  // 用序列化后的title字符串作为key,值存储[原title对象, 子项去重Map]
  let titleGroups = new Map();

  arr.forEach(({title, data}) => {
    // 序列化title生成唯一key,保证内容相同的title对象得到相同key
    const titleKey = JSON.stringify(title);
    if (!titleGroups.has(titleKey)) {
      titleGroups.set(titleKey, [title, new Map()]);
    }
    const [, subMap] = titleGroups.get(titleKey);
    data.forEach(o => subMap.set(o._id, o));
  });

  // 转换为目标格式返回
  return Array.from(titleGroups.values(), ([title, subMap]) => ({
    title,
    data: [...subMap.values()],
  }));
};

适配说明

如果你的title对象可能存在字段顺序不同但内容一致的场景(比如{title:'Sides', id:1}和{id:1, title:'Sides'}),可以将序列化的逻辑替换为按字段排序后再生成字符串,避免误判为不同分组。
如果你的title判断逻辑不需要全字段匹配,只需要匹配title字段的值,也可以直接用title.title作为key,性能比序列化更高:

// 仅匹配title字段值的场景,替换key生成逻辑即可
const titleKey = title.title;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:36:03