String.prototype - JS
localeCompare
W jaki sposób ułożyć tekst w porządku alfabetycznym uwzględniając polskie znaki diakrytyczne?
String.prototype.localeCompare(that)
- Parametry:
String
that - drugi tekst do porównania- Wartość:
Number
- wartość porównania:- liczba mniejsza od zera - gdy bieżący tekst jest mniejszy niż that
- zero - gdy oba teksty są równe
- liczba większa od zera - gdy bieżący tekst jest większy niż that
Dwa teksty możemy porównać ze sobą za pomocą operatora <
oraz >
, ale wtedy porównywane są tak naprawdę ich kody liczbowe. W przypadku alfabetu łacińskiego wszystko jest w porządku. Jednak gdy będziemy próbowali porównać teksty zawierające znaki diakrytyczne, takie porównanie nie odzwierciedli prawidłowej kolejności występowania liter w narodowym alfabecie. Wady tej nie posiada funkcja String.prototype.localeCompare
, która powinna uwzględnić domyślny język ustawiony w systemie operacyjnym użytkownika.
Przykład String.prototype.localeCompare
"abc".localeCompare("def") < 0; // true "def" > "abc"; // true "def".localeCompare("abc") > 0; // true "ą" < "b"; // false "ą".localeCompare("b"); < 0; // true "b" > "ą"; // false "b".localeCompare("ą") > 0; // true var chars = [ " ", "`", "-", "=", "[", "]", "|", ";", "'", ",", ".", "/", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "{", "}", "\\", ":", "\"", "<", ">", "?", "1", "0", "2", "3", "5", "7", "4", "6", "8", "9", "n", "c", "a", "o", "b", "p", "d", "g", "q", "e", "m", "r", "h", "f", "s", "i", "l", "v", "w", "x", "j", "y", "u", "k", "z", "t", "N", "C", "A", "O", "B", "P", "D", "G", "Q", "E", "M", "R", "H", "F", "S", "I", "L", "V", "W", "X", "J", "Y", "U", "K", "Z", "T", "ż", "ó", "ł", "ć", "ę", "ś", "ą", "ź", "ń", "Ż", "Ó", "Ł", "Ć", "Ę", "Ś", "Ą", "Ź", "Ń" ]; var f = function (x, y) { return String.prototype.localeCompare.call(x, y); }; chars.sort(f); // np.: ["'", "-", " ", "!", "\"", "#", "$", "%", "&", "(", ")", "*", ",", ".", // "/", ":", ";", "?", "@", "[", "\\", "]", "^", "`", "{", "|", "}", "~", // "<", "=", ">", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", // "a", "A", "ą", "Ą", "b", "B", "c", "C", "ć", "Ć", "d", "D", "e", "E", // "ę", "Ę", "f", "F", "g", "G", "h", "H", "i", "I", "j", "J", "k", "K", // "l", "L", "ł", "Ł", "m", "M", "n", "N", "ń", "Ń", "o", "O", "ó", "Ó", // "p", "P", "q", "Q", "r", "R", "s", "S", "ś", "Ś", "t", "T", "u", "U", // "v", "V", "w", "W", "x", "X", "y", "Y", "z", "Z", "ź", "Ź", "ż", "Ż"]