Dupliquer possible:
moyen le plus simple de trouver des valeurs en double dans un tableau javascript
Comment vérifier si un tableau contient des valeurs en double?
Si certains éléments du tableau sont identiques, retournez true. Sinon, retournez false.
['hello','goodbye','hey'] //return false because no duplicates exist
['hello','goodbye','hello'] // return true because duplicates exist
Remarquez que je ne me soucie pas de trouver la duplication, je veux seulement un résultat booléen si les tableaux contiennent des duplications.
javascript
duplicates
user847495
la source
la source
var test=['hello','goodbye','hello'] ; if ( test.length != _.unique(test).length ) { // some code }
Réponses:
Si vous avez un environnement ES2015 (au moment d'écrire ces lignes: io.js, IE11, Chrome, Firefox, WebKit tous les soirs), alors ce qui suit fonctionnera et sera rapide (à savoir O (n)):
function hasDuplicates(array) { return (new Set(array)).size !== array.length; }
Si vous n'avez besoin que de valeurs de chaîne dans le tableau, ce qui suit fonctionnera:
function hasDuplicates(array) { var valuesSoFar = Object.create(null); for (var i = 0; i < array.length; ++i) { var value = array[i]; if (value in valuesSoFar) { return true; } valuesSoFar[value] = true; } return false; }
Nous utilisons une "table de hachage"
valuesSoFar
dont les clés sont les valeurs que nous avons vues dans le tableau jusqu'à présent. Nous effectuons une recherche en utilisantin
pour voir si cette valeur a déjà été repérée; si c'est le cas, nous sortons de la boucle et revenonstrue
.Si vous avez besoin d'une fonction qui fonctionne pour plus que de simples valeurs de chaîne, ce qui suit fonctionnera, mais n'est pas aussi performant; c'est O (n 2 ) au lieu de O (n).
function hasDuplicates(array) { var valuesSoFar = []; for (var i = 0; i < array.length; ++i) { var value = array[i]; if (valuesSoFar.indexOf(value) !== -1) { return true; } valuesSoFar.push(value); } return false; }
La différence est simplement que nous utilisons un tableau au lieu d'une table de hachage
valuesSoFar
, car les "tables de hachage" JavaScript (c'est-à-dire les objets) n'ont que des clés de chaîne. Cela signifie que nous perdons le temps de recherche O (1) dein
, au lieu d'obtenir un temps de recherche O (n) deindexOf
.la source
hasDuplicates
, elle devrait vérifier si la taille de l'ensemble a effectivement diminué pendant le processus de conversion, n'est-ce pas? Par conséquent, l'opérateur booléen devrait être!==
et non===
true
pour le tableau suivant:[1, '1']
Une autre approche (également pour les éléments objet / tableau dans le tableau 1 ) pourrait être 2 :
function chkDuplicates(arr,justCheck){ var len = arr.length, tmp = {}, arrtmp = arr.slice(), dupes = []; arrtmp.sort(); while(len--){ var val = arrtmp[len]; if (/nul|nan|infini/i.test(String(val))){ val = String(val); } if (tmp[JSON.stringify(val)]){ if (justCheck) {return true;} dupes.push(val); } tmp[JSON.stringify(val)] = true; } return justCheck ? false : dupes.length ? dupes : null; } //usages chkDuplicates([1,2,3,4,5],true); //=> false chkDuplicates([1,2,3,4,5,9,10,5,1,2],true); //=> true chkDuplicates([{a:1,b:2},1,2,3,4,{a:1,b:2},[1,2,3]],true); //=> true chkDuplicates([null,1,2,3,4,{a:1,b:2},NaN],true); //=> false chkDuplicates([1,2,3,4,5,1,2]); //=> [1,2] chkDuplicates([1,2,3,4,5]); //=> null
Voir également...
1 nécessite un navigateur prenant en charge JSON, ou une bibliothèque JSON sinon.
2 edit: la fonction peut maintenant être utilisée pour une simple vérification ou pour renvoyer un tableau de valeurs en double
la source
null
,NaN
,Infinity
,+Infinity
, et-Infinity
; 3) les objets sont considérés comme égaux s'ils ont les mêmes propriétés propres, même s'ils ont des prototypes différents.Eh bien, j'ai fait un peu de recherche sur Internet pour vous et j'ai trouvé ce lien pratique.
Moyen le plus simple de trouver des valeurs en double dans un tableau JavaScript
Vous pouvez adapter l'exemple de code fourni dans le lien ci-dessus, grâce à "swilliams", à votre solution.
la source