如何判断数组中是否存在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
相关产品推荐
相关产品推荐

