Tri d'un tableau Javascript
christophe
-
shanks le roux de la SSF -
shanks le roux de la SSF -
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
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - 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 !
;-)
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;
}
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
<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
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.
<html> <head> <script type="text/javascript"> // Le tableau non trie contenant des chaines de caracteres var tab = ['5', '6', '12', '22', '20', '11', '9', '1', '8', '7', '11' ] // une fonction qui compare des chaines contenant des entiers function compare_entiers_func(a, b) { // Elle doit retourner : // -1 si a < b // 0 si a = b // 1 si a > b return parseInt(a) - parseInt(b) } // on trie le tableau en utilisant la fonction de comparaison // pour chaines contenant des entiers: tab.sort(compare_entiers_func) // puis on affiche document.write(tab.join(', ')) </script> <meta http-equiv="Content-Type" content="text/plain"> </head> <body> </body> </html>Resultat :