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

如何判断数组中是否存在id重复的对象?

判断对象数组中是否存在重复id的实现方法

需求明确:给定对象数组,若存在id重复的对象则返回true,所有id唯一则返回false。以下是几种实用的实现方式:

方法一:利用Set的唯一性特性

Set会自动去重,提取数组中所有对象的id存入Set,对比Set的长度和原数组长度即可判断是否有重复:

const hasDuplicateIds = (array) => {
  const idSet = new Set(array.map(item => item.id));
  return idSet.size !== array.length;
};

// 测试示例
const array = [
    { id: "id1", quantity: 3, variation: "red", tax: 40 },
    { id: "id1", quantity: 3, variation: "red", tax: 40 },
    { id: "id2", quantity: 3, variation: "red", tax: 40 }
];
console.log(hasDuplicateIds(array)); // 输出 true

方法二:使用Map/对象记录已出现的id(提前终止遍历)

遍历过程中一旦发现重复id就立即返回结果,无需遍历整个数组,性能更优:

const hasDuplicateIds = (array) => {
  const seenIds = new Map();
  for (const item of array) {
    if (seenIds.has(item.id)) {
      return true;
    }
    seenIds.set(item.id, true);
  }
  return false;
};

// 测试示例
const array = [
    { id: "id1", quantity: 3, variation: "red", tax: 40 },
    { id: "id1", quantity: 3, variation: "red", tax: 40 },
    { id: "id2", quantity: 3, variation: "red", tax: 40 }
];
console.log(hasDuplicateIds(array)); // 输出 true

用普通对象代替Map的写法:

const hasDuplicateIds = (array) => {
  const seenIds = {};
  for (const item of array) {
    if (seenIds[item.id]) {
      return true;
    }
    seenIds[item.id] = true;
  }
  return false;
};

方法三:利用filter和indexOf(适合小型数组)

筛选出id第一次出现位置不等于当前索引的元素,若结果长度大于0则说明有重复:

const hasDuplicateIds = (array) => {
  const duplicates = array.filter((item, index) => 
    array.findIndex(i => i.id === item.id) !== index
  );
  return duplicates.length > 0;
};

// 测试示例
const array = [
    { id: "id1", quantity: 3, variation: "red", tax: 40 },
    { id: "id1", quantity: 3, variation: "red", tax: 40 },
    { id: "id2", quantity: 3, variation: "red", tax: 40 }
];
console.log(hasDuplicateIds(array)); // 输出 true

注意:该方法时间复杂度为O(n²),仅推荐在数组元素数量较少时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:45:36