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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:35:13