Tri d'un tableau Javascript
Fermé
bonjour,
Voilà, je stocke dans un tableau des chiffres (1,2,...,15,16) et, une fois le tableau rempli, j'utilise la méthode Javascript : Tableau.sort()
Malheureusement, cette méthode me trie mon tableau en comparant que les premiers chiffres des valeurs... ce qui donne :
1 , 10 , 11 , 12 , 2 , 3 , 31 , 32 , 4 , ...
Vous conviendrez que ce n'est pas tout à fait l'effet recherché... Si vous connaissez la solution à ce pb, merci de m'en toucher un mot.
> Christophe
Voilà, je stocke dans un tableau des chiffres (1,2,...,15,16) et, une fois le tableau rempli, j'utilise la méthode Javascript : Tableau.sort()
Malheureusement, cette méthode me trie mon tableau en comparant que les premiers chiffres des valeurs... ce qui donne :
1 , 10 , 11 , 12 , 2 , 3 , 31 , 32 , 4 , ...
Vous conviendrez que ce n'est pas tout à fait l'effet recherché... Si vous connaissez la solution à ce pb, merci de m'en toucher un mot.
> Christophe
A voir également:
- Trier un tableau javascript
- Trier un tableau excel - Guide
- Tableau word - Guide
- Tableau ascii - Guide
- Tableau croisé dynamique - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
6 réponses
C'est easy ton pb !!!!!
C'est parceque javascript considere tes chiffres comme des char !!!!
utilise la fonction parseInt quand tu fais tes comparaison et ca devrais marcher !
C'est parceque javascript considere tes chiffres comme des char !!!!
utilise la fonction parseInt quand tu fais tes comparaison et ca devrais marcher !
C'est du bidouillage ca fou2dodie ;)
comment peux tu savoir que son tableau est limité a 99???
car si son tableau traite des nombre + grand... 100 sera considéré comme inférieur a 20 !!!!!
dou ta solution devient un vrai casse tete car il faut kil scan son tableau pour voir quel est le nombre comportant le + de chiffre et qu'ensuite il agisse en conséquence tout les nombres comportant moins de chiffre !!!!!
en gros -> cest a choppé un gros mal de tete !
;-)
comment peux tu savoir que son tableau est limité a 99???
car si son tableau traite des nombre + grand... 100 sera considéré comme inférieur a 20 !!!!!
dou ta solution devient un vrai casse tete car il faut kil scan son tableau pour voir quel est le nombre comportant le + de chiffre et qu'ensuite il agisse en conséquence tout les nombres comportant moins de chiffre !!!!!
en gros -> cest a choppé un gros mal de tete !
;-)
autogene31
Messages postés
4
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
29 décembre 2007
1
29 déc. 2007 à 01:28
29 déc. 2007 à 01:28
ENCORE UNE PETITE ERREUR MAIS QUI SERAIT FATALE !
ET Donc Fonction désormais OK !!!
function trieurInt(t)
{
var mem;
var tatrier = new Array();
for(y=0;y<t.length;y++) { tatrier[y] = parseInt(t[y]); } // important !!! => typer le contenu en int entier
for(j=0;j<tatrier.length-1;j++)
{
for(k=(j+1);k<tatrier.length;k++)
{
if(tatrier[j]>tatrier[k])
{
mem = tatrier[j];
tatrier[j]=tatrier[k];
tatrier[k]=mem;
}
}
}
return tatrier;
}
ET Donc Fonction désormais OK !!!
function trieurInt(t)
{
var mem;
var tatrier = new Array();
for(y=0;y<t.length;y++) { tatrier[y] = parseInt(t[y]); } // important !!! => typer le contenu en int entier
for(j=0;j<tatrier.length-1;j++)
{
for(k=(j+1);k<tatrier.length;k++)
{
if(tatrier[j]>tatrier[k])
{
mem = tatrier[j];
tatrier[j]=tatrier[k];
tatrier[k]=mem;
}
}
}
return tatrier;
}
fou2dodie
Messages postés
605
Date d'inscription
mercredi 6 juin 2001
Statut
Membre
Dernière intervention
29 août 2006
33
19 févr. 2003 à 16:04
19 févr. 2003 à 16:04
ou alors tu écris 01, 02, 03,...09 au lieu de 1,2,3,....,9
ça marche aussi normalement
LMCT
All I know is I’m in love
with someone who loves me too
ça marche aussi normalement
LMCT
All I know is I’m in love
with someone who loves me too
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
autogene31
Messages postés
4
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
29 décembre 2007
1
28 déc. 2007 à 23:32
28 déc. 2007 à 23:32
<script language='javascript'>
var tab = new Array(5,3,1,4,2);
var memind;
// passer le tableau en parametre
function trieurInt(t)
{
var mem;
var tatrier = new Array();
for(y=0;y<t.length;y++) { tatrier[y] = t[y]; } // copie du tableau et pas de la reference !
for(j=0;j<tatrier.length-1;j++)
{
for(k=(j+1);k<tatrier.length;k++)
{
if(tatrier[j]>tatrier[k])
{
mem = tatrier[j];
tatrier[j]=tatrier[k];
tatrier[k]=mem;
}
}
}
return tatrier;
}
function main()
{
var res = "";
var ori = "";
var tabfin = trieurInt(tab);
ori = tab.toString();
res = tabfin.toString();
alert("ori: "+ori + "\n" + "res: "+res);
}
main();
</script>
// fin de ce que les anciens appelait le trie à bulles
+ une petite reference : https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles
var tab = new Array(5,3,1,4,2);
var memind;
// passer le tableau en parametre
function trieurInt(t)
{
var mem;
var tatrier = new Array();
for(y=0;y<t.length;y++) { tatrier[y] = t[y]; } // copie du tableau et pas de la reference !
for(j=0;j<tatrier.length-1;j++)
{
for(k=(j+1);k<tatrier.length;k++)
{
if(tatrier[j]>tatrier[k])
{
mem = tatrier[j];
tatrier[j]=tatrier[k];
tatrier[k]=mem;
}
}
}
return tatrier;
}
function main()
{
var res = "";
var ori = "";
var tabfin = trieurInt(tab);
ori = tab.toString();
res = tabfin.toString();
alert("ori: "+ori + "\n" + "res: "+res);
}
main();
</script>
// fin de ce que les anciens appelait le trie à bulles
+ une petite reference : https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles
autogene31
Messages postés
4
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
29 décembre 2007
1
28 déc. 2007 à 23:37
28 déc. 2007 à 23:37
// fin de ce que les anciens !appelaient! le trie à bulles
désolé... // fin de ce que les anciens appelaient l'orthographe... ;-)
désolé... // fin de ce que les anciens appelaient l'orthographe... ;-)
Modifié par shanks le roux de la SSF le 12/04/2011 à 08:49
Car sans une fonction de comparaison specialisee (compare_entiers_func dans l'exemple), Javascript va utiliser sa fonction (interne) de comparaison de chaines de caracteres, puisque les elements du tableau sont des chaines de caracteres.
Cette fonction de comparaison interne utilise une compaison lexographique:
'11' vient avant '2', de meme que 'aa' vient avant 'b'.
Pour plus d'inormation sur les fonctions de comparaison:
https://developer.mozilla.org/fr/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core/Objets_globaux/Array/sort
Dans l'exemple suivant, la fonction compare_entiers_func convertis donc les chaines en entiers avant des comparer.
Resultat :