1444 votes

arr.sort() ne trie pas correctement les nombres entiers

Essayer d'obtenir la valeur la plus haute et la plus basse d'un tableau que je sais ne contiendra que des entiers semble être plus difficile que je pensais?

 var numArray = [140000, 104, 99];
numArray = numArray.sort();
alert(numArray[0] + ", " + numArray[numArray.length - 1]);
 

Je m'attends à ce que cela montre "99, 140000". Au lieu de cela, il montre "104, 99". Donc, il semble que le genre gère les valeurs comme des chaînes de caractères?

N'importe quel moyen de faire trier la fonction de tri sur la valeur entière?

2032voto

aks Points 3315

Par défaut, la méthode de tri trie les éléments par ordre alphabétique. Pour trier numériquement il suffit d'ajouter une nouvelle méthode qui gère les tris numériques (sortNumber, montré ci-dessous) -

 function sortNumber(a,b) {
    return a - b;
}

var numArray = [140000, 104, 99];
numArray.sort(sortNumber);
alert(numArray[0] + ", " + numArray[numArray.length - 1]);
 

222voto

MarzSocks Points 311

Construire sur toutes les réponses ci-dessus, ils peuvent également être fait dans une ligne comme ceci:

 var numArray = [140000, 104, 99];
numArray = numArray.sort(function (a, b) { 
    return a - b;
});

//outputs: 99, 104, 140000
 

86voto

Paul Dixon Points 122033

array.sort effectue un tri lexicographique par défaut, pour un tri numérique, fournissez votre propre fonction. Voici un exemple simple:

 function compareNumbers(a, b)
{
    return a - b;
}

numArray.sort(compareNumbers);
 

Notez également que le tri fonctionne "en place", l'affectation n'est pas nécessaire.

12voto

Peter Points 4655

En Javascript, le comportement par défaut de la méthode sort () est de trier les valeurs dans un tableau par ordre alphabétique.

Pour trier par numéro, vous devez définir une fonction de tri numérique (ce qui est très facile):

 ...
function sortNumber(a,b)
{
  return a - b;
}

numArray = numArray.sort(sortNumber);
 

-3voto

firestoke Points 414

voici ma fonction de tableau de tri dans la bibliothèque utils:

 sortArray: function(array) {
    array.sort(function(a, b) {
        return a > b;
    });
},


# let's test a string array
var arr = ['bbc', 'chrome', 'aux', 'ext', 'dog'];
utils.sortArray(arr);
console.log(arr);
>>> ["aux", "bbc", "chrome", "dog", "ext", remove: function]

# let's test a number array
var arr = [55, 22, 1425, 12, 78];
utils.sortArray(arr);
console.log(arr);
>>> [12, 22, 55, 78, 1425, remove: function]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X