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

Set添加重复对象问题:如何高效避免重复插入对象?

如何高效向Set中添加对象并避免重复

JavaScript的Set是通过**严格相等(===)**判断元素是否重复的。对于对象这类引用类型,即使两个对象的键值完全一致,它们也是不同的内存引用,因此Set会将它们视为独立元素,无法自动去重。

下面提供几种高效的解决方法:

方案1:利用对象的唯一标识维护去重

如果你的对象存在唯一标识(比如org_name),这是最高效的方式,直接用唯一标识作为Set的元素来检测重复:

// 用Set存储唯一标识,避免重复
const orgIds = new Set();
// 存储去重后的对象数组
const uniqueOrgs = [];

const addOrg = (orgObj) => {
  if (!orgIds.has(orgObj.org_name)) {
    orgIds.add(orgObj.org_name);
    uniqueOrgs.push(orgObj);
  }
};

// 调用添加
addOrg({
  org_name: org.org_name,
  relation_type: OrganisationRelationType.SELF,
  related_org: org.org_name
});
addOrg({
  org_name: org.org_name,
  relation_type: OrganisationRelationType.SELF,
  related_org: org.org_name
});

// 最终uniqueOrgs中仅保留一个对象

方案2:序列化对象为字符串(全字段匹配)

如果需要基于对象的所有字段判断重复,且对象没有不可序列化的内容(比如函数、Symbol),可以将对象序列化为字符串存入Set:

const orgStrSet = new Set();

const obj1 = {
  org_name: org.org_name,
  relation_type: OrganisationRelationType.SELF,
  related_org: org.org_name
};
const obj2 = {
  org_name: org.org_name,
  relation_type: OrganisationRelationType.SELF,
  related_org: org.org_name
};

orgStrSet.add(JSON.stringify(obj1));
orgStrSet.add(JSON.stringify(obj2));

// 还原为对象数组
const uniqueOrgs = Array.from(orgStrSet).map(str => JSON.parse(str));

注意:如果对象的属性顺序不同,JSON.stringify的结果会不一样,可能导致误判;同时无法处理不可序列化的属性。

方案3:自定义哈希值(多字段组合判断)

如果需要多个字段组合起来判断唯一性,可以手动生成唯一哈希字符串:

const orgHashSet = new Set();

// 根据关键字段生成唯一哈希
const generateOrgHash = (orgObj) => {
  return `${orgObj.org_name}-${orgObj.relation_type}-${orgObj.related_org}`;
};

const addUniqueOrg = (orgObj) => {
  const hash = generateOrgHash(orgObj);
  if (!orgHashSet.has(hash)) {
    orgHashSet.add(hash);
    // 如果需要保留对象,可用Map存储:const orgMap = new Map(); orgMap.set(hash, orgObj);
  }
};

// 调用添加
addUniqueOrg({
  org_name: org.org_name,
  relation_type: OrganisationRelationType.SELF,
  related_org: org.org_name
});
addUniqueOrg({
  org_name: org.org_name,
  relation_type: OrganisationRelationType.SELF,
  related_org: org.org_name
});

这种方法灵活,适合多字段联合判断的场景,需确保哈希生成逻辑能唯一标识对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:24:14