Trier un tableau à deux dimensions par colonnes
Bonjour à tous.
J'ai tenté de vouloir faire une sorte de ORDER BY, mais en javascript, pour un tableau à deux dimensions bien définies.
Par exemple, mettons que nous avons ceci :
Code:
1 2 3 4 5 6 7 8 9 10
| var sitesInternet=Array();
sitesInternet[0]=new Array();
sitesInternet[0]['nom']='developpez';
sitesInternet[0]['note']='10';// genre...
sitesInternet[1]=new Array();
sitesInternet[1]['nom']='google';
sitesInternet[1]['note']='9';// Bah ouais quand même
sitesInternet[2]=new Array();
sitesInternet[2]['nom']='microsoft';
sitesInternet[2]['note']='0';// Boouh ! VISTA ! |
Donc si je trie mon tableau par la colonne "nom", j'obtiendrai donc dans l'ordre :
"developpez","google","microsoft"
Et si je trie par notes, j'aurai :
"developpez","google","microsoft"
...
Non finalement, on va rajouter un Linux pour mieux comprendre :D :
Code:
1 2 3 4
|
sitesInternet[3]=new Array();
sitesInternet[3]['nom']='linux';
sitesInternet[3]['note']='10'; |
Donc on peut obtenir différents ordres en fonction du critère de tri par colonne "nom" ou "note" (respectivement, "developpez","google","linux","microsoft" et "developpez","linux","google","microsoft")
Voici ma fonction de tri par colonnes :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| function userDefinedFunction_sortByColumn(columnName)
{
var arrayToSort=new Array();
for(i=0;i<this.length;i++)
arrayToSort[i]=this[i][columnName]+'-'+i;
arrayToSort.sort();
var arrayToReturn=new Array();
for(i=0;i<arrayToSort.length;i++)
arrayToReturn[i]=this[arrayToSort[i].replace(/-([0-9]+)$/,'$1')];
this=arrayToReturn;
}
Array.prototype.sortByColumn=userDefinedFunction_sortByColumn; |
En gros, je parcours tous les éléments des colonnes "columnName" et ajoute un petit suffixe.
La fonction native à javascript sort(), me trie ce qu'il faut, puis je récupère, via expressions régulières les indexs placés pour réordonner mon nouveau tableau.
Le problème : Tu peux pas test le "this=<quelquechose>". Il aime pas.
D'un autre côté, ça me dérange pas, car je pourrais très bien faire un classique "return //to the future", mais je me demandais s'il était possible de le faire, sachant qu'à priori, ma syntaxe me paraissait correcte :/
EDIT : SpaceFrog, m'a dit que c'était dans les contribs... j'avais pas cherché au bon endroit :(.. .gomen
RE-EDIT : Pour ceux qui cherchent une fonction de tri de tableau à 2 dimensions moins complexe, c'est par ici : http://www.developpez.net/forums/sho...d.php?t=135913