Ce face String.prototype.localeCompare
localeCompare returnează un număr negativ dacă textul vine înaintea celuilalt în ordinea alfabetică, pozitiv dacă vine după și 0 dacă sunt echivalente.
Spre deosebire de comparația cu <, care folosește codurile Unicode, localeCompare cunoaște regulile limbii: în română, „ș” vine după „s”, iar „ă” după „a”. Cu { sensitivity: "base" } ignoră diferențele de majuscule și accentele care, în limba aleasă, nu formează o literă separată.
Pentru multe comparații (de exemplu sortarea unei liste mari), un obiect Intl.Collator creat o singură dată este mai rapid.
Parametri
| Parametru | Descriere |
|---|---|
altSir |
Textul cu care se compară. |
limba |
Opțional. Codul limbii, de exemplu "ro". |
optiuni |
Opțional. De exemplu { sensitivity: "base" } sau { numeric: true }. |
Ce returnează
Un număr negativ, 0 sau pozitiv.
Exemple
Exemplul 1: Sortare corectă în română
const orase = ["Ștei", "Sibiu", "Arad", "Țăndărei", "Turda", "Brăila"];
console.log([...orase].sort());
console.log([...orase].sort((a, b) => a.localeCompare(b, "ro")));
Rezultat
[ 'Arad', 'Brăila', 'Sibiu', 'Turda', 'Ștei', 'Țăndărei' ]
[ 'Arad', 'Brăila', 'Sibiu', 'Ștei', 'Turda', 'Țăndărei' ]
Exemplul 2: Comparație fără diferența dintre majuscule
În română, „ș” este o literă separată de „s”, deci „Iași” și „Iasi” rămân diferite chiar cu sensitivity: "base". În engleză, „ș” este doar un „s” cu semn, iar textele sunt considerate egale.
console.log("ANA".localeCompare("ana", "ro"));
console.log("ANA".localeCompare("ana", "ro", { sensitivity: "base" }));
console.log("Iași".localeCompare("Iasi", "ro", { sensitivity: "base" }));
console.log("Iași".localeCompare("Iasi", "en", { sensitivity: "base" }));
Rezultat
1
0
1
0
Exemplul 3: Numere în interiorul textului
const fisiere = ["capitol10.txt", "capitol2.txt", "capitol1.txt"];
fisiere.sort((a, b) => a.localeCompare(b, "ro", { numeric: true }));
console.log(fisiere);
Rezultat
[ 'capitol1.txt', 'capitol2.txt', 'capitol10.txt' ]
Greșeli frecvente
- Verifici rezultatul cu
=== -1sau=== 1. Standardul garantează doar semnul, nu valoarea exactă. Compară cu< 0și> 0. - Sortezi nume românești cu
sort()simplu și literele cu diacritice ajung la sfârșit.
Comenzi înrudite
sort: Ordonează elementele unui tablou. Modifică tabloul original.Intl.Collator: Compară și sortează texte după alfabetul unei limbi; varianta rapidă a lui localeCompare.toUpperCase / toLowerCase: Transformă tot textul în litere mari sau în litere mici.