90 votes

Supprimer les éléments en double d'un tableau

Par exemple, j'ai un tableau comme celui-ci ;

var arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 10, 10]

Mon but est de supprimer les éléments répétitifs du tableau et d'obtenir un tableau final comme celui-ci ;

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Comment y parvenir en JavaScript ?

NOTE : le tableau n'est pas trié, les valeurs peuvent être dans un ordre arbitraire.

255voto

LightStyle Points 4126

Il est plus facile d'utiliser Array.filter :

var unique = arr.filter(function(elem, index, self) {
    return index === self.indexOf(elem);
})

23voto

dystroy Points 145126

Comme les éléments sont déjà ordonnés, vous n'avez pas besoin de construire une carte, il y a une solution rapide :

var newarr = [arr[0]];
for (var i=1; i<arr.length; i++) {
   if (arr[i]!=arr[i-1]) newarr.push(arr[i]);
}

Si votre tableau n'était pas trié, vous utiliseriez une carte :

var newarr = (function(arr){
  var m = {}, newarr = []
  for (var i=0; i<arr.length; i++) {
    var v = arr[i];
    if (!m[v]) {
      newarr.push(v);
      m[v]=true;
    }
  }
  return newarr;
})(arr);

Notez que cette solution est, de loin, beaucoup plus rapide que la réponse acceptée.

11voto

Kevin Bowersox Points 48223
var arr = [1,2,2,3,4,5,5,5,6,7,7,8,9,10,10];

function squash(arr){
    var tmp = [];
    for(var i = 0; i < arr.length; i++){
        if(tmp.indexOf(arr[i]) == -1){
        tmp.push(arr[i]);
        }
    }
    return tmp;
}

console.log(squash(arr));

Exemple de travail http://jsfiddle.net/7Utn7/

Compatibilité pour indexOf sur les anciens navigateurs

6voto

sAnS Points 1179

Vous pouvez essayer comme ceci en utilisant jquery

 var arr = [1,2,2,3,4,5,5,5,6,7,7,8,9,10,10];
    var uniqueVals = [];
    $.each(arr, function(i, el){
        if($.inArray(el, uniqueVals) === -1) uniqueVals.push(el);
    });

5voto

Grijesh Chauhan Points 28442

Essayez de suivre l'exemple suivant Suppression des doublons dans un tableau (simple) :

Array.prototype.removeDuplicates = function (){
  var temp=new Array();
  this.sort();
  for(i=0;i<this.length;i++){
    if(this[i]==this[i+1]) {continue}
    temp[temp.length]=this[i];
  }
  return temp;
} 

Edit :

Ce code n'a pas besoin d'être trié :

Array.prototype.removeDuplicates = function (){
  var temp=new Array();
  label:for(i=0;i<this.length;i++){
        for(var j=0; j<temp.length;j++ ){//check duplicates
            if(temp[j]==this[i])//skip if already present 
               continue label;      
        }
        temp[temp.length] = this[i];
  }
  return temp;
 } 

( Mais pas un code testé ! )

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