var arr = []; arr.push(row1); arr.push(row2); ... arr.push(rown);
Comment trier par row['key']
?
Une matrice JavaScript a une méthode de sort()
intégrée. Dans ce cas, quelque chose comme le suivant fonctionnerait:
arr.sort( function(row1, row2) { var k1 = row1["key"], k2 = row2["key"]; return (k1 > k2) ? 1 : ( (k2 > k1) ? -1 : 0 ); } );
Vous appelez la fonction de tri d'un tableau avec votre comparateur. Un comparateur JavaScript est juste une fonction qui retourne -1, 0 ou 1 selon que a soit inférieur a b, a est égal à b ou a est supérieur à b:
myarray.sort(function(a,b){ if(a < b){ return -1; } else if(a == b){ return 0; } else { // a > b return 1; } });
Ce n'est qu'un exemple, votre fonction peut baser la comparaison sur ce que vous voulez, mais elle doit retourner -1,0,1.
J'espère que cela t'aides.
Voici un ensemble de fonctions si vous souhaitez trier, en descendant ou trier sur plusieurs colonnes dans un tableau.
var cmp = function(x, y){ return x > y? 1 : x < y ? -1 : 0; }, arr = [{a:0,b:0},{a:2,b:1},{a:1,b:2},{a:2, b:2}]; // sort on column a ascending arr.sort(function(x, y){ return cmp( cmp(xa, ya), cmp(ya, xa) ); }); // sort on column a descending arr.sort(function(x, y){ return cmp( -cmp(xa, ya), -cmp(ya, xa) ); }); // sort on columns a ascending and b descending arr.sort(function(x, y){ return cmp([cmp(xa, ya), -cmp(xb, yb)], [cmp(ya, xa), -cmp(yb,xb)]); });
Pour obtenir un tri ascendant, utilisez "cmp (…)", et pour obtenir un ordre descendant, utilisez "-cmp (…)"
Et pour trier sur plusieurs colonnes, comparez deux tableaux de cmp (…)
Considérez le code suivant:
var arr = new Array(); for(var i = 0; i < 10; ++i) { var nestedArray = [ "test", Math.random() ]; arr.push(nestedArray); } function sortBySecondField(a, b) { var aRandom = a[1]; var bRandom = b[1]; return ((aRandom < bRandom) ? -1 : ((aRandom > bRandom) ? 1 : 0)); } arr.sort(sortBySecondField); alert(arr);
Maintenant, modifiez simplement une fonction sortBySecondField
pour comparer a['key']
au lieu de a[1]
et faites de même pour b
.