web-dev-qa-db-fra.com

Trier les chaînes par ordre décroissant en Javascript (le plus efficacement)?

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?

Mise à jour

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)?

9
Ole

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 que obj.sort( function ) et obj.sort( function ) (en utilisant localCompare)

Test de performance ici: https://jsperf.com/reverse-string-sort/1

15
colxi

En utilisant simplement sort et reversea> 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.

2
Emeeus