Pourquoi la fonction de triage Javascript () ne donne-t-elle pas la sortie attendue?

Duplication possible:
Sorte de ne pas fonctionner avec des nombres entiers?
Comment trier le nombre dans la méthode de tri javascript
Array.sort () ne trime pas les nombres correctement

Code:

var x = [40,100,1,5,25,10]; x.sort(); 

sortie:

 1,10,100,25,40,5 

Mes résultats attendus:

 1,5,10,25,40,100 

La fonction JavaScript Array .sort() convertit par défaut les éléments du tableau en cordes avant de procéder à des comparaisons.

Vous pouvez annuler cela:

 x.sort(function(e1, e2) { return e1 - e2; }); 

(La fonction passée doit renvoyer un nombre négatif, nul ou positif, selon que le premier élément est inférieur ou égal au second).

Je n'ai jamais vu de justification pour cet aspect étrange de la langue.

Selon MDN Array.sort

Si compareFunction n'est pas fourni, les éléments sont triés en les transformant en chaînes et en comparant des chaînes dans un ordre lexicographique ("dictionnaire" ou "annuaire téléphonique", non numérique). Par exemple, "80" vient avant "9" en ordre lexicographique, mais dans un ordre numérique 9 vient avant 80.

Donc, vous devriez faire quelque chose comme:

 function compareNumbers(a, b) { return a - b; } var x = [40,100,1,5,25,10]; x.sort(compareNumbers); 
 var x = [40,100,1,5,25,10]; x.sort(function(a,b){return ab}); 

Il effectue un tri par ordre alphabétique et ascendant (le caractère 1 est trié … 1,1_, 1_ , 2 , 4_, 5) par défaut et en fournissant une fonction de comparaison modifie ce comportement

Vous trouverez plus d'informations ici: http://www.w3schools.com/jsref/jsref_sort.asp