JavaScript:如何检查数组是否具有重复值

2025-06-10

JavaScript:如何检查数组是否具有重复值

最初发表于Will 的博客


在 JavaScript 中处理数组时,我们有时需要判断数组中是否包含重复值。遗憾的是,JavaScript 数组没有提供任何内置方法来帮我们实现这些功能——我们必须自己实现。

解决这个问题的一种方法可能是这样的:

function checkForDuplicates(array) {
  let valuesAlreadySeen = []

  for (let i = 0; i < array.length; i++) {
    let value = array[i]
    if (valuesAlreadySeen.indexOf(value) !== -1) {
      return true
    }
    valuesAlreadySeen.push(value)
  }
  return false
}

虽然这种方法有效,但在最坏的情况下,如果唯一的重复值出现在数组的末尾,那么这种方法的性能就很差了。我们必须遍历整个数组(这可能会非常大!),才能在最后一个元素处发现数组中实际上有一个非唯一值。

我最近学到的另一种方法是利用 ES6 Sets 的强大功能。

如果你不熟悉 JavaScript 中的 Sets(我最近才知道!),这里是 MDN 定义

Set对象是值的集合。您可以按插入顺序迭代集合中的元素。 中的值Set只能出现一次;它在Set的集合中是唯一的。

再把最后一行读一遍,因为这是我们的秘诀。“ 中的值Set只能出现一次;它在Set的集合中是唯一的。”

这意味着我们可以将原始数组转换为Set,然后确信它只包含唯一值。一旦我们从数组中提取出所有唯一值并将它们存储在 中Set,我们就可以比较数组和 Set 的长度。如果长度不一样,则说明数组中一定包含重复值!

该方法如下:

function checkForDuplicates(array) {
  return new Set(array).size !== array.length
}

如果 的长度Set与 的长度不同,则此函数将返回true,表明该数组确实包含重复项。否则,如果 的长度与 的Set长度相同,则函数将返回false,这样我们就可以确定原始数组不包含重复值!

我真的很喜欢第二种方法,因为它简洁且富有表现力,但如果您需要针对旧版浏览器,您可能会遇到浏览器支持问题,所以请考虑到这一点!

鏂囩珷鏉ユ簮锛�https://dev.to/will_devs/javascript-how-to-check-if-an-array-has-duplicate-values-cha
PREV
部署 Docker 容器时 5 个代价高昂的错误(以及如何像专业人士一样避免它们😎)
NEXT
为什么你不应该再害怕写博客文章。