Pourquoi la fonction de tri de javascript ne fonctionne-t-elle pas bien?
Cette simple javascript
var x = new Array();
x[0] = 2.73;
x[1] = 11.17;
x[2] = 3.12
x.sort();
for(var i in x)
alert(x[i]);
produit les résultats:
11.17, 2.73, 3.12
au lieu de 2.73, 3.12, 11.17
.
Pourquoi et comment puis-je résoudre ce problème?
Merci d'avance!
source d'informationauteur Christos Mitsis
Vous devez vous connecter pour publier un commentaire.
C'est le tri par ordre alphabétique, essayez de passer votre propre fonction de tri:
Par défaut,
Array.sort
va trier par ordre alphabétique (lexographically)...mais vous pouvez fournir votre propre fonction. Essayez:Entre eux, les questions /réponses tout vous dire, mais aucun d'entre eux mentionnent à la fois des problèmes dans votre code. Voici la réponse complète:
Le tri n'est pas de faire ce que vous voulez parce que le tri par défaut est lexicale (c'est à dire les éléments du tableau sont convertis en chaînes et par rapport par ordre alphabétique). Vous pouvez fournir votre propre fonction de comparaison
sort()
:Deuxièmement,
for...in
est plutôt vous parler de rien de concret quant à savoir si votre tableau est trié correctement, parce que l'énumération defor...in
n'est pas défini (même si la plupart mais pas tous les navigateurs ne les grandes lignes ce que vous attendez). Utiliser unfor
boucle à la place (comme en effet vous devez généralement pour les tableaux):Vous n'êtes pas de l'itération correctement. Il doit être:
Lorsque vous utilisez
for..in
en javascript ce passe en boucle sur les propriétés de l'objet et de l'ordre d'itération n'est pas défini. Vous devriez voir quelque étrange de sortie comme toutes les fonctions définies dans la classe Array.Tableau.fonction sort() traite ses éléments comme des Chaînes de caractères et si aucune fonction n'est passé à la tri (), elle convertit les éléments de l'Unicode et sortes. Par conséquent, il est conseillé de passer une Fonction de tri personnalisé à chaque fois que le tri des nombres.
Ce customSort() va trier le tableau in_place dans l'ordre croissant.