108 votes

Comment obtenir un tableau de valeurs uniques à partir d'un tableau contenant des doublons en JavaScript?

Avec un tableau ['0','1','1','2','3','3','3'] , le résultat devrait être ['0','1','2','3'] .

257voto

Pedro L. Points 2406

Allez les gars! Nous sommes en 2013 ...

 var arrayUnique = function(a) {
    return a.reduce(function(p, c) {
        if (p.indexOf(c) < 0) p.push(c);
        return p;
    }, []);
};
 

51voto

tjameson Points 8098

Si vous souhaitez maintenir l'ordre:

arr = arr.reverse().filter(function (e, i, arr) {
    return arr.indexOf(e, i+1) === -1;
}).reverse();

Car il n'y a pas de reverse indexof, j'inverse la matrice, de filtrer les doublons, puis de le ré-inverser la tendance.

La fonction de filtre des regards pour toute occurrence de l'élément après l'indice actuel (avant dans le tableau d'origine). Si on en trouve une, il jette de cet élément.

Edit:

Sinon, vous pouvez utiliser lastindexOf (si vous ne se soucient pas de l'ordre):

arr = arr.filter(function (e, i, arr) {
    return arr.lastIndexOf(e) === i;
});

Cela permet de garder des éléments uniques, mais seule la dernière occurence. Cela signifie que ['0', '1', '0'] devient ['1', '0'], pas ['0', '1'].

26voto

mahesh Points 131

Voici une fonction de prototype de tableau:

 Array.prototype.unique = function() {
    var unique = [];
    for (var i = 0; i < this.length; i++) {
        if (unique.indexOf(this[i]) == -1) {
            unique.push(this[i]);
        }
    }
    return unique;
};
 

14voto

fguillen Points 11849

Avec des underscorejs

 _.uniq([1, 2, 1, 3, 1, 4]); //=> [1, 2, 3, 4]
 

9voto

Raekye Points 2453
 function array_unique(arr) {
    var result = [];
    for (var i = 0; i < arr.length; i++) {
        if (result.indexOf(arr[i]) == -1) {
            result.push(arr[i];
        }
    }
    return result;
}
 

Pas de fonction intégrée. Si la liste de produits ne contient pas l'élément, ajoutez-le.

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