Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/06/2007, 12h01   #1
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 10
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mai 2007
Messages : 10
Points : 39
Points : 39
Par défaut [prototypes]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 :
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
G.D.V.L. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 12h20   #2
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Salut,
tu peux recopier les valeurs :

Code :
1
2
3
	for(i = 0; i < this.length; i++)	{
		this[i] = output[i];
	}

Je comprends pas trop ton histoire de suffixe.
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h43.


 
 
 
 
Partenaires

Hébergement Web