154 votes

En Javascript, comment vérifier si un tableau a des valeurs dupliquées ?

Duplicata possible :
La façon la plus simple de trouver des valeurs dupliquées dans un tableau javascript

Comment vérifier si un tableau a des valeurs dupliquées ?

Si certains éléments du tableau sont identiques, il faut renvoyer true. Sinon, il renvoie false.

['hello','goodbye','hey'] //return false because no duplicates exist
['hello','goodbye','hello'] // return true because duplicates exist

Notez que je ne me soucie pas de trouver les doublons, je veux seulement un résultat booléen pour savoir si les tableaux contiennent des doublons.

3voto

O95 Points 477

Si vous avez affaire à des valeurs simples, vous pouvez utiliser array.some() et indexOf()

Par exemple, disons vals es ["b", "a", "a", "c"]

const allUnique = !vals.some((v, i) => vals.indexOf(v) < i);

some() retournera vrai si tous renvoie un résultat positif. Ici, nous allons itérer les valeurs (à partir de l'index 0) et appeler indexOf() qui renverra l'index de la première occurrence de l'élément donné (ou -1 s'il n'est pas dans le tableau). Si son id est plus petit que l'id actuel, il doit y avoir au moins une valeur identique avant lui. Ainsi, l'itération 3 renverra vrai car "a" (à l'index 2) est d'abord trouvé à l'index 1.

2voto

alguerocode Points 1

Est très simple, vous pouvez utiliser la fonction Array.prototype.every fonction

function isUnique(arr) {
  const isAllUniqueItems = input.every((value, index, arr) => {
    return arr.indexOf(value) === index; //check if any duplicate value is in other index
  });

  return isAllUniqueItems;
}

1voto

KyleMit Points 6937

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.

0voto

    this.selectedExam = [];
    // example exam obj: {examId:1, name:'ExamName'}
    onExamSelect(exam: any) {
    if(!this.selectedExam.includes(exam?.name)){ 
      this.selectedExam.push(exam?.name);
    }}

Dans le code ci-dessus, j'ai pris un tableau et en déclenchant une fonction particulière (onExamSelect), nous vérifions les doublons et poussons les éléments uniques.

-4voto

tushar747 Points 187

J'ai fait quelques recherches sur Internet et j'ai trouvé ce lien pratique.

La façon la plus simple de trouver des valeurs dupliquées dans un tableau JavaScript

Vous pouvez adapter à votre solution l'exemple de code fourni dans le lien ci-dessus, avec l'aimable autorisation de "swilliams".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X