W3CSchools a cet exemple:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Est-ce le moyen le plus efficace pour trier les chaînes par ordre décroissant en Javascript?
L'une des réponses utilise localeCompare
. Juste curieux de savoir si si nous faisons reverse()
, cela fonctionnera-t-il pour toutes les locales (Peut-être que c'est une question distincte - faites-le moi savoir dans les commentaires)?
Si vous considérez
obj.sort().reverse();
CONTRE
obj.sort((a, b) => (a > b ? -1 : 1))
CONTRE
obj.sort((a, b) => b.localeCompare(a) )
Le gagnant de la performance est: obj.sort().reverse()
.
En testant avec un tableau de 10 000 éléments,
obj.sort().reverse()
est environ 100 fois plus rapide queobj.sort( function )
etobj.sort( function )
(en utilisantlocalCompare
)
Test de performance ici: https://jsperf.com/reverse-string-sort/1
En utilisant simplement sort
et reverse
a
> Z
, c'est faux si vous voulez commander des minuscules et des majuscules cas chaînes:
var arr = ["a","b","c","A","B","Z"];
arr.sort().reverse();
console.log(arr)//<-- [ 'c', 'b', 'a', 'Z', 'B', 'A' ] wrong!!!
Caractères anglais
var arr = ["a","b","c","A","B","Z"];
arr.sort((a,b)=>b.localeCompare(a))
console.log(arr)
Caractères spéciaux utilisant locales , dans cet exemple es (espagnol)
var arr = ["a", "á", "b","c","A","Á","B","Z"];
arr.sort((a, b) => b.localeCompare(a, 'es', {sensitivity: 'base'}))
console.log(arr)
la sensibilité dans ce cas est base :
Seules les chaînes qui diffèrent en lettres de base se comparent comme inégales. Exemples: a ≠ b, a = á, a = A.