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, i0, gdy są równoważne. - Zmienia oryginał
- Nie
Przykład
#const students = ['Łukasz', 'Zosia', 'ania', 'Marek', 'Ewa']
console.log([...students].sort())
console.log([...students].sort((a, b) => a.localeCompare(b, 'pl')))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
#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") inumeric(porównywanie liczb według wartości).
Więcej przykładów
#console.log('a'.localeCompare('b', 'pl'))
console.log('b'.localeCompare('a', 'pl'))
console.log('kot'.localeCompare('kot', 'pl'))
console.log('ł'.localeCompare('m', 'pl') < 0)const answer = 'polska'
const correct = 'Polska'
console.log(answer === correct)
console.log(answer.localeCompare(correct, 'pl', { sensitivity: 'base' }) === 0)const lessons = ['lekcja10', 'lekcja2', 'lekcja1']
console.log([...lessons].sort())
console.log([...lessons].sort((a, b) => a.localeCompare(b, 'pl', { numeric: true })))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-1lub1. - Przy sortowaniu tysięcy elementów utwórz raz
const collator = new Intl.Collator("pl")i przekażcollator.comparedosort(). To szybsze niż wielokrotnelocaleCompare(). - 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
#- Array.prototype.sort()Sortuje elementy tablicy w miejscu i zwraca tę samą tablicę.
- Array.prototype.toSorted()Zwraca posortowaną kopię tablicy, nie zmieniając oryginału.
- String.prototype.toLowerCase()Zwraca kopię napisu zamienioną na małe litery. Przydaje się do porównań i porządkowania danych.
- String.prototype.toUpperCase()Zwraca kopię napisu zamienioną na wielkie litery. Poprawnie obsługuje polskie znaki.
Widzisz błąd albo brakuje przykładu? Napisz do nas.