60 votes

Tri par tableau Javascript et unique

J'ai un tableau JavaScript comme celui-ci

 var myData=['237','124','255','124','366','255'];
 

J'ai besoin que les éléments du tableau soient uniques et triés:

 myData[0]='124';
myData[1]='237';
myData[2]='255';
myData[3]='366';
 

Même si les membres du tableau sont comme des entiers, ce ne sont pas des entiers puisque j'ai déjà converti chacun en chaîne:

 var myData[0]=num.toString();
 

etc...

Existe-t-il une fonction pour effectuer toutes ces tâches en JavaScript?

155voto

lonesomeday Points 95456

C'est en fait très simple - il est beaucoup plus simple de trouver des valeurs uniques si les valeurs sont triées:

 function sort_unique(arr) {
    arr = arr.sort(function (a, b) { return a*1 - b*1; });
    var ret = [arr[0]];
    for (var i = 1; i < arr.length; i++) { // start loop at 1 as element 0 can never be a duplicate
        if (arr[i-1] !== arr[i]) {
            ret.push(arr[i]);
        }
    }
    return ret;
}
console.log(sort_unique(['237','124','255','124','366','255']));
//["124", "237", "255", "366"]
 

42voto

mrmonkington Points 171

Cela peut être suffisant dans les cas où vous ne pouvez pas définir la fonction à l'avance (comme dans un bookmarklet):

 myData.sort().filter(function(el,i,a){if(i==a.indexOf(el))return 1;return 0})
 

17voto

loostro Points 1017
 function sort_unique(arr) {
    return arr.sort().filter(function(el,i,a) {
        return (i==a.indexOf(el));
    });
}
 

// Nécessite jQuery ( sort () et filter () sont jQuery).

À votre santé

6voto

Raynos Points 82706

Essayez d'utiliser une bibliothèque externe comme trait de soulignement

var f = _.compose(_.uniq, function(array) {
    return _.sortBy(array, _.identity);
});

var sortedUnique = f(array);

Cela dépend de l' _.compose, _.uniq, _.sortBy, _.identity

Voir le live exemple

Qu'est-ce que ça fait?

Nous voulons une fonction qui prend un tableau et renvoie un tableau trié à la non-entrées uniques supprimé. Cette fonction doit faire deux choses, le tri et la création d'une pile unique.

C'est un bon travail de composition, de sorte que nous composons l'unique et la fonction de tri ensemble. _.uniq peut seulement être appliquée sur le tableau avec un argument, alors il est juste passé de _.compose

l' _.sortBy fonction des besoins de tri conditionnelle fonctionnelle. il s'attend à une fonction qui retourne une valeur et le tableau sera trié sur cette valeur. Puisque la valeur que nous commandez en est la valeur dans le tableau, on peut juste passer le _.fonction identité.

Nous avons maintenant une composition d'une fonction qui (prend un tableau et renvoie une gamme unique) et une fonction qui (prend un tableau et renvoie un tableau trié, triés par leurs valeurs).

Nous avons il suffit d'appliquer la composition sur le tableau et nous avons notre unique tableau trié.

-2voto

evandrix Points 1927

Je crains que vous ne pouvez pas combiner ces fonctions, c'est à dire. tu dois faire quelque chose comme ceci:-

myData.unique().sort();

Sinon, vous pouvez mettre en œuvre une sorte de sortedset (aussi disponible dans d'autres langues) - qui porte à la fois la notion de tri et la suppression des doublons, comme vous le désirez.

Espérons que cette aide.

Références:-

Tableau.tri

Tableau.unique

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