Tri de tableau

Résolu
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 15 sept. 2006 à 18:56
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 19 sept. 2006 à 10:20
Bonjour à tous,

je me demande pourquoi quand je trie mon tableau alphabétiquement, ils sont tous bon sauf le premier qui est mis en dernière position ! et je me suis rendu compte que l'ordre du tableau avant que je le trie avait une influence sur son ordre après le tri, ce qui est le comble.
En vrai, j'utilise une fonction de callback un tout petit plus compliqué mais à peine (histoire de colonne de tableau). Mais même en utilisant sort() tout court, j'ai le même problème.

        function tri_contacts(a, b){    //fonction callback pour le tri du tableau contacts
            if(a.toUpperCase() > b.toUpperCase()){
                return 1;
            }
            else {
                return -1;
            }
        }
      

            for(i in contacts){
                document.write(contacts[i]);      //pour voir le tableau
            }
            contacts = contacts.sort(tri_contacts);
           
            for(i in contacts){
                document.write(contacts[i]);      //pour voir le tableau
            }

le tableau à l'origine :
Lamlin Meliline Alineme Kapersky Bouloré Vakhoff

après le tri :
Bouloré Kapersky Lamlin Meliline Vakhoff Alineme

merci d'avance !

8 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
17 sept. 2006 à 07:51
on ne trie pas un tableau associatif,
et on n'utilise pas non plus d'indice.

var tab= new Array();
tab["Pierre"]="pierre@yahoo.fr";
tab["Alain"]="alain@yahoo.fr"; 
tab.sort();
for ( var a in tab ) 
      alert(a);

attention aux majuscules/minuscules pour le tri
<hr />
cordialement   Bul    mon Site    =Bul M'écrire<hr />
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 sept. 2006 à 07:23
bonjour,
    _ erreur : contacts = contacts.sort(tri_contacts); 

    _ faudrait voir comment est décrit le tableau, comment on appelle
          les fonctions....
    _ pour le moins curieux d'avoir à trier un tableau conçu, à priori,
          comme un tableau associatif ?


<hr />                 cordialement   Bul     mon Site     M'écrire<hr />
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
16 sept. 2006 à 20:59
Bonjour Bultez,
tu as raison pour le tri d'un tableau associatif : de toute façon ça me pose problème qu'il réinitialise les clés, je ne dois pas utiliser sort...

Après un test, le constat est simple :
mon tableau était par exemple (il n'existe pas forcément de tab[0] ou de tab[2]) :

tab[1][nom] = Pierre
tab[1][mail] = pierre@yahoo.fr
tab[5][nom] = Alain
tab[5][mail] = alain@yahoo.fr
tab[3][nom] = Jean
.....

et en utilisant sort, si je fais un dump, ça me donne ça :

tab[1][nom] = Jean
tab[1][mail] = jean@yahoo.fr
tab[2][nom] = Pierre

tab[2][mail] = pierre@yahoo.fr
.......
et seulement à la fin :
tab[0][nom] = Alain

tab[0][mail] = alain@yahoo.fr

donc en fait quand il trie mon tableau, il met la case 0 tout à la fin.
Je fais autrement pour l'instant donc le problème ne se pose plus, mais c'est bizarre, c'est pareil sous IE et FF.
à+
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
17 sept. 2006 à 10:02
euh... je ne sais pas si j'ai été très clair...

sont-ce mes gouttes prises hier soir dans mon bourbon 
   ou le vin rouge du petit déjeuner ce matin qui était frelaté....

<HTML Lang="fr">
<HEAD>
<TITLE></TITLE>
</HEAD>

<Script type="Text/JavaScript"><!----------
var tab=new Array();
tab["pierre"]="pppp";
tab["alain"]="aaaa";
tab.sort();
for ( a in tab )
    alert ( a+"="+tab[a] );
//----------></Script>
</HTML>

on peut bien entendu faire du multi zones ( tab["cle"]=new Array()... )

<hr />
cordialement   Bul    mon Site    M'écrire<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
18 sept. 2006 à 09:52
Merci Bultez, je trouve ça assez contraignant mais bon... vive les tri du php !
merci encore
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 sept. 2006 à 10:10
contraignant ?
   le tri ? array.sort(), et c'est tout, difficile de faire plus court/mieux !
   le tableau associatif ? on n'est nullement obligé d'utiliser "l'associatif'"
      ( même si ça me semble bien propre sur soi ).
<hr />
            cordialement      Bul       mon Site       M'écrire<hr />
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
19 sept. 2006 à 08:31
Justement !
une seule option de tri, et celle du callback, c'est limité! qd on vient de php, on regrette les options insensibles à la casse, tri naturel, constantes de tri, tri inverse, tri par clés, tri avec ou sans reinitialisation des clés, tri multidimensionnel standardisé...
donc c'est contraignant de faire des tableaux qui doivent obligatoirement être construits de manière à fonctionner avec les fonctions natives de javascript.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
19 sept. 2006 à 10:20
"un peu" plus complet nativement en php, certes.
faut le faire dans ce langage si c'est mieux.
pas "trop difficile" de concevoir ces fonctions en javascript,
   on doit même les trouver sur le web à mon humble avis.
<hr />
            cordialement   Bul    mon    Site    M'écrire<hr />
0
Rejoignez-nous