Javascript sort array

Mon tableau n'est pas trié correctement. Quelqu'un peut-il me faire savoir ce que je fais mal?

... sortArray = new Array ("hello", "Link to Google", "zFile", "aFile"); //sort array if (dir == "asc") { sortArray.sort(function(a,b){return a - b}); } else { sortArray.sort(function(a,b){return b - a}); } for(var i=0; i<sortArray.length; i++) { console.log(sortArray[i]); } 

Le journal les affiche dans le même ordre qu'ils ont été entrés.

Vous souhaitez faire une comparaison dans votre tri, pas une soustraction:

 if (dir == "asc") { sortArray.sort(function(a, b) { a = a.toLowerCase(); b = b.toLowerCase(); return a === b ? 0 : a > b : 1 : -1; }); } else { sortArray.sort(function(a, b) { a = a.toLowerCase(); b = b.toLowerCase(); return b === a ? 0 : b > a : 1 : -1; }); } 

J'ai également utilisé pour toLowerCase() afin que «Link to Google» soit placé de manière appropriée.

EDIT: Mise à jour pour résoudre le problème de comparaison selon les commentaires.

Voir l'exemple →

Vous essayez de trier en soustrayant des chaînes, auxquelles vous obtiendrez NaN .

Le problème est que «a-b» traite les cordes comme des nombres, ce qui renvoie NaN. Vous obtiendrez le comportement que vous recherchez (en supposant que vous cherchez des types sensibles à la casse) si vous remplacez vos sortes par:

  if (dir == "asc") { sortArray.sort(function(a,b){return a < b ? -1 : 1}); } else { sortArray.sort(function(a,b){return b < a ? -1 : 1}); } 

Vos fonctions de comparateur renvoient NaN , puisqu'il reçoit deux chaînes et effectue une soustraction, une opération qui n'est pas bien définie sur les chaînes.

Ce que vous devriez avoir est quelque chose de plus comme:

 function(a,b){ return a>b? 1 : (a<b ? -1 : 0); } 

Ou vous pouvez utiliser localeCompare :

 function(a,b){ return a.localeCompare(b); } 

N'oubliez pas de traiter correctement le cas, par exemple "L" < "a" alors que "l" > "a"