J'ai un tableau JS avec des chaînes, par exemple:
var strArray = [ "q", "w", "w", "e", "i", "u", "r"];
J'ai besoin de comparer les chaînes en double dans un tableau, et s'il existe une chaîne en double, il devrait y avoir une boîte d'alerte pointant vers cette chaîne.
J'essayais de le comparer avec la boucle for
, mais je ne sais pas comment écrire du code pour que array vérifie si ses propres chaînes sont dupliquées, sans chaîne à déterminer préalablement.
la fonction findDuplicates compare l'index de tous les éléments du tableau avec l'index de la première occurrence du même élément. Si les index ne sont pas identiques, il le renvoie en double.
let strArray = [ "q", "w", "w", "w", "e", "i", "u", "r"];
let findDuplicates = arr => arr.filter((item, index) => arr.indexOf(item) != index)
console.log(findDuplicates(strArray)) // All duplicates
console.log([...new Set(findDuplicates(strArray))]) // Unique duplicates
function checkIfDuplicateExists(w){
return new Set(w).size !== w.length
}
console.log(
checkIfDuplicateExists(["a", "b", "c", "a"])
// true
);
console.log(
checkIfDuplicateExists(["a", "b", "c"]))
//false
}
var strArray = [ "q", "w", "w", "e", "i", "u", "r", "q"];
var alreadySeen = [];
strArray.forEach(function(str) {
if (alreadySeen[str])
alert(str);
else
alreadySeen[str] = true;
});
J'ai ajouté une autre copie de votre original, juste pour montrer qu'elle trouverait une copie non consécutive.
Utilisation de n pe fonction sur les tableaux: Si un élément du tableau a un numéro d'index depuis le début n'est pas égal au numéro d'index de la fin, cet élément existe plusieurs fois dans le tableau.
// Vanilla js
function hasDuplicates(arr) {
return arr.some( function(item) {
return arr.indexOf(item) !== arr.lastIndexOf(item);
});
}
Utilisez des clés d'objet pour obtenir de bonnes performances lorsque vous travaillez avec un grand tableau (dans ce cas, la boucle pour chaque élément et la boucle pour vérifier la duplication seront très lentement).
var strArray = ["q", "w", "w", "e", "i", "u", "r"];
var counting = {};
strArray.forEach(function (str) {
counting[str] = (counting[str] || 0) + 1;
});
if (Object.keys(counting).length !== strArray.length) {
console.log("Has duplicates");
var str;
for (str in counting) {
if (counting.hasOwnProperty(str)) {
if (counting[str] > 1) {
console.log(str + " appears " + counting[str] + " times");
}
}
}
}
Le code suivant utilise un nique-filter (vérifie si chaque occurrence d'un élément est la première occurrence) à compare le nombre d'éléments uniques dans un tableau avec le nombre total d'éléments =: si les deux sont égaux, le tableau ne contient que des éléments uniques, sinon il y a des doublons.
var firstUnique = (value, index, array) => array.indexOf(value) === index;
var numUnique = strArray.filter(firstUnique).length;
var allUnique = strArray.length === numUnique;