L'avantage des solutions qui utilisent Set
es O(1)
performance sur la recherche d'éléments existants dans une liste, plutôt que d'avoir à revenir en arrière.
L'avantage des solutions qui utilisent Some
est un court-circuit lorsque le doublon est trouvé tôt, de sorte que vous n'avez pas à continuer d'évaluer le reste du tableau lorsque la condition est déjà remplie.
Une solution qui combine les deux consiste à construire un ensemble de manière incrémentale, à terminer rapidement si l'élément actuel existe dans l'ensemble, sinon à l'ajouter et à passer à l'élément suivant.
const hasDuplicates = (arr) => {
let set = new Set()
return arr.some(el => {
if (set.has(el)) return true
set.add(el)
})
}
hasDuplicates(["a","b","b"]) // true
hasDuplicates(["a","b","c"]) // false
Según JSBench.me Il devrait être assez performant pour les différents cas d'utilisation. L'approche par la taille de l'ensemble est la plus rapide lorsqu'il n'y a pas de doublons, et la vérification de some + indexOf est la plus rapide lorsqu'il y a un doublon très précoce, mais cette solution fonctionne bien dans les deux scénarios, ce qui en fait une bonne implémentation polyvalente.