La fonction suivante permet de se débarrasser des doublons présents dans
un tableaux avec élégance.
//cleanArray removes all duplicated elements function cleanArray(array) { var i, j, len = array.length, out = [], obj = {}; for (i = 0; i < len; i++) { obj[array[i]] = 0; } for (j in obj) { out.push(j); } return out; }
On va créer un tableau associatif avec chaque valeur présente dans le
tableau passé en paramètre. Ainsi, lorsqu’un doublon est rencontré,
l’ajout d’un champ avec le même index n’a pas d’effet. On parcourt
ensuite ce tableau et l’on stocke les indexes dans le tableau out qui
sera retourné.
Exemple:
var nbr = [42, 101010, 7, 42, 7, 42, 101010]; var newNbr = cleanArray(nbr); console.log(newNbr);
Qui donnera:
["42", "101010", "7"]
Très astucieux d’utiliser les objets JS pour supprimer les doublons, la comparaison est du coup automatique via la key de l’object.
Merci beaucoup Victor, ton code marche très bien!
Mieux vaudrait mettre un signe + deavant le j, lors du push, pour retrouver un tableau d’entiers plutôt que de chaînes de caractères…
Bonne remarque!
Il conviendrait donc de modifier la fonction en conséquence pour pouvoir l’utiliser indifféremment sur un tableau d’entier ou de chaînes de caractères. Ou de choisir l’une ou l’autre des versions selon qu’on manipule exclusivement l’un des deux types de tableaux.
Malheureusement, ne fonctionne pas avec un tableau contenant des objets plutot que des entiers ou des chaines de caractères.
Pour les tableaux d’objets
Merci pour cette fonction simple et très utile pour un débutant comme moi !
Vraiment malin, mais avec underscore.js
la method uniq, le fait en une ligne.
Merci
c’est pratique mais si je veux faire cela avec un objet est-ce possible?
merci beaucoup :)
var i, j, len = array.length, out = [], obj = {};
for (i = 0; i < len; i++) {
obj[array[i]] = 0;
}
for (j in obj) {
out.push(j);
}
return out;
}
Fonction très utile et légère en plus
Merci de l’avoir partagée