Tri de tableaux, à 1 ou 2 dimensions
En javascript, la méthodesort()
permet de trier directement un tableau.
Avec cette méthode, on peut effectuer des tris efficaces de listes (tableau une dimension), mais aussi de tableaux deux dimensions (lignes et colonnes), trier suivant une dimension particulière, ou encore trier des données selon d'autres données, dans un autre tableau par exemple.
Méthode sort
, tri par défaut
En javascript, la méthode sort
permet de trier / ordonner les éléments d'un tableau.
De nombreuses ressources expliquent son fonctionnement complet, par exemple sur
w3school
ou sur
developer.mozilla.
Par exemple,
tab=[1,5,12,-3,2]; tab.sort(); alert(tab); // affiche: -3,1,12,2,5 tab=["avion","voiture","Bateau","velo"]; tab.sort(); alert(tab) // affiche: Bateau,avion,velo,voiture
Tri avec fonction de comparaison
La méthodesort
accepte en paramètre optionnel une fonction qui permet de définir la manière de faire le tri des éléments.
Cette fonction est une relation d'ordre, c'est-à-dire entre autre une relation binaire qui permettant de comparer deux éléments.
Cette fonction à deux arguments, a
et b
par exemple, doit retourner un nombre négatif si a
doit être placé avant b
, retourner un nombre positif si b
doit êplacé avant b
, tandis qu'avec un résultat nul les positions de a
et b
restent inchangées.
Avec les exemples précédents, pour ordonner des nombres de manière croissante ou des chaînes de caractères par ordre alphabétique, sans se préoccuper des majuscules/minuscules:
tab=[1,5,12,-3,2]; tab.sort(function (a,b) {return a-b;}); alert(tab); // affiche: -3,1,2,5,12 tab=["avion","voiture","Bateau","velo"]; // tab.sort(function (a,b) { if (a.toLowerCase()<b.toLowerCase()) {return -1;} else if (a.toLowerCase()>b.toLowerCase()) {return 1;} else {return 1;}}); alert(tab) // affiche: avion,Bateau,velo,voiture
Liste des indices des valeurs triées
Il peut être intéressant parfois de connaître l'ordre du tri, c'est-à-dire la liste des indices dans lesquels étaient les éléments dans le tableau initial.test = [4,3,5,1]; // => Ordre des éléments 3,1,0,2 len = test.length; indices = new Array(len); for (var i = 0; i < len; ++i) indices[i] = i; indices.sort(function (a, b) { if (test[a] < test[b]) {return -1} else if (test[a] > test[b]) {return 1;} else {return 0;} }); //alert(indices);
Trier un tableau à deux dimensions, suivant une ligne ou suivant une colonne
On peut appliquer la méthode précédente à un tableau à deux dimensions ; on spécifie justement alors dans la fonction que le tri s'effectue selon les éléments souhaité.Par exemple tri, pour un tri suivant la deuxième colonne:
A=[[1, 5, 9], [2, 17, 8], [3, 3, 7], [6, 4, 1]]; A.sort(function(a,b) { if (a[1] < a[1]) {return -1} else if (a[1] > b[1]) {return 1;} else {return 0;} }); // A est maintenant // A=[[3, 3, 7], // [6, 4, 1], // [1, 5, 9], // [2, 17, 8]];
Voir aussi: