Tri de tableau

Résolu
Signaler
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
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

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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 />
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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 />
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.
à+
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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 />
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Merci Bultez, je trouve ça assez contraignant mais bon... vive les tri du php !
merci encore
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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 />
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
"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 />