JavaScript:检查对象数组中指定键是否存在重复值的最优方法
检查对象数组指定键重复值的最优方法
多重循环的嵌套遍历时间复杂度为O(n²),当数组规模较大时性能很差,更优的方案是利用哈希表(Set或普通对象)实现一次遍历判断,时间复杂度为O(n),具体实现如下:
方法一:使用Set
Set是ES6新增的数据结构,天然具备去重特性,遍历数组时记录已出现的键值,遇到重复立即返回结果:
function hasDuplicateKey(arr, key) { const seen = new Set(); for (const item of arr) { const value = item[key]; if (seen.has(value)) { return true; // 发现重复值 } seen.add(value); } return false; // 无重复 } // 测试示例数组 const items = [ { id: 1243, name: "Cola", isLocationAssign: true, location: 8 }, { id: 1243, name: "Cola", isLocationAssign: true, qty: 30, location: 8 } ]; console.log(hasDuplicateKey(items, 'location')); // 输出 true
方法二:使用普通对象(兼容旧环境)
如果需要兼容不支持Set的旧环境,可以用普通对象存储已出现的键值:
function hasDuplicateKey(arr, key) { const seen = {}; for (const item of arr) { const value = item[key]; if (seen[value]) { return true; } seen[value] = true; } return false; } // 测试 console.log(hasDuplicateKey(items, 'location')); // 输出 true
这两种方法只需要遍历数组一次,遇到重复值就提前终止遍历,相比多重循环效率提升非常明显,是处理这类问题的最优方案。
内容的提问来源于stack exchange,提问作者emma
相关产品推荐
相关产品推荐

