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, et0si elles sont équivalentes. - Modifie l’original
- Non
Exemple
#const students = ['Émile', 'Zoé', 'léa', 'Marc', 'Ève']
console.log([...students].sort())
console.log([...students].sort((a, b) => a.localeCompare(b, 'fr')))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
#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, notammentsensitivity("base","accent","case","variant") etnumeric(comparaison des nombres selon leur valeur).
Plus d’exemples
#console.log('a'.localeCompare('b', 'fr'))
console.log('b'.localeCompare('a', 'fr'))
console.log('chat'.localeCompare('chat', 'fr'))
console.log('é'.localeCompare('f', 'fr') < 0)const answer = 'france'
const correct = 'France'
console.log(answer === correct)
console.log(answer.localeCompare(correct, 'fr', { sensitivity: 'base' }) === 0)const lessons = ['leçon10', 'leçon2', 'leçon1']
console.log([...lessons].sort())
console.log([...lessons].sort((a, b) => a.localeCompare(b, 'fr', { numeric: true })))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-1ou1. - Pour trier des milliers d’éléments, créez une seule fois
const collator = new Intl.Collator("fr")et passezcollator.compareàsort(). C’est plus rapide que d’appelerlocaleCompare()à 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
#- Array.prototype.sort()Trie les éléments du tableau sur place et renvoie ce même tableau.
- Array.prototype.toSorted()Renvoie une copie triée du tableau, sans modifier l’original.
- String.prototype.toLowerCase()Renvoie une copie de la chaîne convertie en minuscules. Utile pour les comparaisons et la normalisation des données.
- String.prototype.toUpperCase()Renvoie une copie de la chaîne convertie en majuscules. Gère correctement les lettres accentuées.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.