String.prototype.localeCompare()

Compare deux chaînes selon les règles d’une langue. Renvoie un nombre négatif, zéro ou un nombre positif, idéal pour trier.

Renvoie
Un nombre négatif quand la chaîne doit se placer avant compareString, positif quand elle vient après, et 0 si elles sont équivalentes.
Modifie l’original
Non
Sur cette page

Exemple

#
JavaScript
const students = ['Émile', 'Zoé', 'léa', 'Marc', 'Ève']

console.log([...students].sort())
console.log([...students].sort((a, b) => a.localeCompare(b, 'fr')))
Console
['Marc', 'Zoé', 'léa', 'Ève', 'Émile']
['Émile', 'Ève', 'léa', 'Marc', 'Zoé']

Définition et utilisation

#

La méthode localeCompare() détermine si, dans l’ordre alphabétique, une chaîne doit se placer avant une autre, après elle, ou si elles sont équivalentes. Elle renvoie un nombre négatif, zéro ou un nombre positif, exactement ce qu’attend la fonction de comparaison de sort().

Un simple sort() sans fonction de comparaison trie le texte selon le code des caractères, donc les lettres accentuées se retrouvent à la fin, et les majuscules passent avant les minuscules. Avec localeCompare() et le code de langue "fr", la lettre é se classe juste après e, comme dans un dictionnaire.

Le troisième argument est un objet d’options. sensitivity: "base" fait considérer a et A comme égaux, et numeric: true compare les nombres présents dans le texte selon leur valeur, donc "leçon2" se place avant "leçon10". Pour trier de grandes listes, l’objet Intl.Collator avec les mêmes options est plus rapide.

Syntaxe

#
Syntaxe
string.localeCompare(compareString)
string.localeCompare(compareString, locales)
string.localeCompare(compareString, locales, options)

Paramètres

#
  • compareString

    string

    Chaîne avec laquelle comparer.
  • locales

    string | string[], optionnel

    Code de langue, comme "fr" ou "en", qui détermine les règles de tri. Par défaut, la langue du navigateur.
  • options

    object, optionnel

    Réglages de comparaison, notamment sensitivity ("base", "accent", "case", "variant") et numeric (comparaison des nombres selon leur valeur).

Plus d’exemples

#
La valeur renvoyée
JavaScript
console.log('a'.localeCompare('b', 'fr'))
console.log('b'.localeCompare('a', 'fr'))
console.log('chat'.localeCompare('chat', 'fr'))
console.log('é'.localeCompare('f', 'fr') < 0)
Console
-1
1
0
true
Comparaison sans tenir compte de la casse
JavaScript
const answer = 'france'
const correct = 'France'

console.log(answer === correct)
console.log(answer.localeCompare(correct, 'fr', { sensitivity: 'base' }) === 0)
Console
false
true
Des nombres dans les noms
JavaScript
const lessons = ['leçon10', 'leçon2', 'leçon1']

console.log([...lessons].sort())
console.log([...lessons].sort((a, b) => a.localeCompare(b, 'fr', { numeric: true })))
Console
['leçon1', 'leçon10', 'leçon2']
['leçon1', 'leçon2', 'leçon10']

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Vérifiez seulement le signe du résultat (< 0, > 0, === 0), pas un nombre précis. La spécification ne garantit pas que ce sera exactement -1 ou 1.
  • Pour trier des milliers d’éléments, créez une seule fois const collator = new Intl.Collator("fr") et passez collator.compare à sort(). C’est plus rapide que d’appeler localeCompare() à répétition.
  • Indiquez toujours un code de langue. Sans lui, le résultat dépend des réglages du navigateur et peut varier d’un ordinateur à l’autre.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.