JavaScriptNapisy

String.prototype.localeCompare()

Porównuje dwa napisy według reguł języka. Zwraca liczbę ujemną, zero lub dodatnią, idealną do sortowania.

Zwraca
Liczbę ujemną, gdy napis powinien stać przed compareString, dodatnią, gdy po nim, i 0, gdy są równoważne.
Zmienia oryginał
Nie
Na tej stronie

Przykład

#
JavaScript
const students = ['Łukasz', 'Zosia', 'ania', 'Marek', 'Ewa']

console.log([...students].sort())
console.log([...students].sort((a, b) => a.localeCompare(b, 'pl')))
Konsola
['Ewa', 'Marek', 'Zosia', 'ania', 'Łukasz']
['ania', 'Ewa', 'Łukasz', 'Marek', 'Zosia']

Definicja i zastosowanie

#

Metoda localeCompare() sprawdza, czy w porządku alfabetycznym napis powinien stać przed innym napisem, po nim, czy są równoważne. Zwraca liczbę ujemną, zero lub dodatnią, czyli dokładnie to, czego oczekuje funkcja porównująca w sort().

Zwykłe sort() bez funkcji porównującej układa tekst według kodów znaków, więc polskie litery trafiają na koniec, a wielkie litery wyprzedzają małe. Z localeCompare() i kodem języka "pl" litera Ł stanie zaraz po L, a Ś po S, tak jak w słowniku.

Trzeci argument to opcje. sensitivity: "base" sprawia, że a i A są uznawane za równe, a numeric: true porównuje liczby w tekście według wartości, więc "lekcja2" wypada przed "lekcja10". Przy sortowaniu dużych list szybszy jest obiekt Intl.Collator z tymi samymi opcjami.

Składnia

#
Składnia
string.localeCompare(compareString)
string.localeCompare(compareString, locales)
string.localeCompare(compareString, locales, options)

Parametry

#
  • compareString

    string

    Napis, z którym porównujesz.
  • locales

    string | string[], opcjonalny

    Kod języka, np. "pl" lub "en", który decyduje o regułach porządku. Domyślnie język przeglądarki.
  • options

    object, opcjonalny

    Ustawienia porównania, m.in. sensitivity ("base", "accent", "case", "variant") i numeric (porównywanie liczb według wartości).

Więcej przykładów

#
Wartość zwracana
JavaScript
console.log('a'.localeCompare('b', 'pl'))
console.log('b'.localeCompare('a', 'pl'))
console.log('kot'.localeCompare('kot', 'pl'))
console.log('ł'.localeCompare('m', 'pl') < 0)
Konsola
-1
1
0
true
Porównanie bez względu na wielkość liter
JavaScript
const answer = 'polska'
const correct = 'Polska'

console.log(answer === correct)
console.log(answer.localeCompare(correct, 'pl', { sensitivity: 'base' }) === 0)
Konsola
false
true
Liczby w nazwach
JavaScript
const lessons = ['lekcja10', 'lekcja2', 'lekcja1']

console.log([...lessons].sort())
console.log([...lessons].sort((a, b) => a.localeCompare(b, 'pl', { numeric: true })))
Konsola
['lekcja1', 'lekcja10', 'lekcja2']
['lekcja1', 'lekcja2', 'lekcja10']

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Sprawdzaj tylko znak wyniku (< 0, > 0, === 0), a nie konkretną liczbę. Specyfikacja nie gwarantuje, że będzie to dokładnie -1 lub 1.
  • Przy sortowaniu tysięcy elementów utwórz raz const collator = new Intl.Collator("pl") i przekaż collator.compare do sort(). To szybsze niż wielokrotne localeCompare().
  • Zawsze podawaj kod języka. Bez niego wynik zależy od ustawień przeglądarki i może się różnić między komputerami.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.