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