

new!








|
|
|
 |
| > Trier un tableau avec une règle de tri |
[ Posté par Extraterrestre ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 07-05-2008 à 22:21 | 30 messages ]
  Salut à tous,
je voudrais savoir comment faire pour trier un tableau sur une colonne spécifique.
Je sait qu'il existe la fonction sort() et que en paramètre on peut mettre une fonction de tri. Mais je n'arrive vraiment pas à comprendre comment fonctionne cette règle de tri.
Concrètement, j'ai cré un tableau (avec la fonction array) qui s'appelle "Film", puis un autre qui s'appelle "Genre". Et enfin, dans un 3ème tableau (nommé "Tableau") j'ai mis les 2 tableaux précédents pour former un tableau à 2 colonnes. Et donc, je voudrais trier mon tableau "Tableau" par rapport à la colonne "Film".
Pouvez-vous m'aider s'il vous plait. Merci d'avance
 
|
|
|
[ Posté par #:-{)% ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 08-05-2008 à 03:25 | 2325 messages ]
  |
 Alut
houla, c'est 1 peu complexe, j'ai retrouvé ceci ds mes archives :
<html>
<head>
<title>Tri de table javascript</title>
<script language="javascript">
function reclasse(ordre)
{
personne = cree_tableau();
personne = tri_tableau(personne, ordre);
ecrit_tableau(personne);
}
function cree_tableau()
{
var personne = new Array;
elem = document.getElementById("liste");
ligne = elem.getElementsByTagName("TR");
for (var i = 0 ; i < ligne.length ; i++)
{
colonne = ligne.item(i).getElementsByTagName("TD");
nom = colonne.item(0).firstChild.nodeValue;
prenom = colonne.item(1).firstChild.nodeValue;
cp = colonne.item(2).firstChild.nodeValue;
ville = colonne.item(3).firstChild.nodeValue;
personne[i] = new liste(nom, prenom, cp, ville);
}
return personne;
}
function tri_tableau(personne, ordre)
{
for (var i = 0 ; i < personne.length ; i++)
{
for( var j = i+1 ; j < personne.length ; j++)
{
switch (ordre)
{
case "nom":
premier = personne[i].nom;
suivant = personne[j].nom;
break;
case "prenom":
premier = personne[i].prenom;
suivant = personne[j].prenom;
break;
case "cp":
premier = personne[i].cp;
suivant = personne[j].cp;
break;
case "ville":
premier = personne[i].ville;
suivant = personne[j].ville;
break;
}
if (premier > suivant)
{
tmp = personne[i];
personne[i] = personne[j];
personne[j] = tmp;
}
}
}
return personne;
}
function ecrit_tableau(personne)
{
elem = document.getElementById("liste");
ligne = elem.getElementsByTagName("TR");
for (var i = 0 ; i < ligne.length ; i++)
{
colonne = ligne.item(i).getElementsByTagName("TD");
colonne.item(0).firstChild.nodeValue = personne[i].nom;
colonne.item(1).firstChild.nodeValue = personne[i].prenom;
colonne.item(2).firstChild.nodeValue = personne[i].cp;
colonne.item(3).firstChild.nodeValue = personne[i].ville;
}
}
function liste(nom, prenom, cp, ville ,naissance)
{
this.nom = nom;
this.prenom = prenom;
this.cp = cp;
this.ville = ville;
this.naissance = naissance;
return(this);
}
</script>
</head>
<body>
<h3 align="center">Cliquez sur le titre de colonne pour trier</h3>
<table align="center" width="75%" border="1">
<thead>
<tr>
<th><a href="javascript:onclick=reclasse('nom')">Nom</a></th>
<th><a href="javascript:onclick=reclasse('prenom')">Prénom</a></th>
<th><a href="javascript:onclick=reclasse('cp')">Code Postal</a></th>
<th><a href="javascript:onclick=reclasse('ville')">Ville</a></th>
</tr>
</thead>
<tbody id="liste">
<tr>
<td>dupont</td>
<td>jules</td>
<!-- j<a href="html/mapage.htm">ules</a> -->
<td align="center">75012</td>
<td>paris</td>
</tr>
<tr>
<td>macheprot</td>
<td>bernard</td>
<td align="center">78000</td>
<td>mantes</td>
</tr>
<tr>
<td>heinz</td>
<td>franz</td>
<td align="center">68000</td>
<td>colmar</td>
</tr>
<tr>
<td>zorglub</td>
<td>andré</td>
<td align="center">76000</td>
<td>rouen</td>
</tr>
<tr>
<td>buzard</td>
<td>henri</td>
<td align="center">14000</td>
<td>caen</td>
</tr>
</tbody>
</table>
</body>
</html>
|
|
Atchao
________________ Oubli du BBcode, rééditer!
barbe-sauvage ex Mozopiens devenu renard de feu... et un peu konq sur les bords
Les OG et les DR, je M pas :/
| [ Posté par Extraterrestre ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 08-05-2008 à 19:30 | 30 messages ]
  Merci de ta réponse. En effet cette solution semble plutot compliqué, mais bon ça pourra toujours me servir ...
Il n'y a pas moyen de de mettre une regle (qui est en fait une fonction) en paramètre de la méthode sort() ??
J'ai vu plusieurs exemples sur Internet mais je ne comprend pas très bien ...
J'ai vu que quand on renvoie la valeur -1 ça inverse l'odre. Mais le problème dans mon cas c'est que ça m'inverse l'ordre des colonnes, alors qu'il faudrait que ça inverse l'ordre des lignes ...
Si quelqu'un peut m'aider ... Merci d'avance
| [ Posté par Extraterrestre ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 09-05-2008 à 11:44 | 30 messages ]
  Bon en fait c'est bon, je me suis débrouillé avec le code que tu m'as donné, je l'ai adapté pour mon cas.
Merci de ton aide
tchao
|
|
Services email :
  Vous devez vous identifier pour profiter des services par email du forum.
|

|