Będzie to bardzo krótki wpis. Możliwe, że będzie to pierwszy z serii. Przedstawię w nim jak posortować tablicę alfabetycznie, która zawiera ciągi z polskimi znakami (ang. array of strings).
W języku JavaScript mamy do sortowania tablic służy funkcja sort()
, która działa tak:
['Baro', 'Ąmar', 'Ęla', 'Ale'].sort();
// ["Ale", "Baro", "Ąmar", "Ęla"]
NOTE: funkcja zwraca, ale też sortuje, tablicę w miejscu, więc aby nie stracić oryginalnej tablicy należy ją skopiować, można użyć
arr.slice().sort()
lub[...arr].sort()
.
Nie jest to dokładnie to, o co nam chodzi. W poprawnie posortowanej tablicy „Ąmar” powinno być drugie na liście (przed „Baro”). Takie posortowanie naszych ciągów znaków wynika z faktu, że brane są pod uwagę kody znaków (ang. CodePoints), które w tablicy znaków nie są w tych samych miejscach, co w Polskim alfabecie. Polskie znaki są na końcu, (zobacz tabelę Unicode).
A oto rozwiązanie, które poprawnie posortuje tablicę:
['Baro', 'Ąmar', 'Ęla', 'Ale'].sort((a,b) => a.localeCompare(b));
// ["Ale", "Ąmar", "Baro", "Ęla"]
Tak samo można posortować obiekty po jakimś polu (np. po nazwisku):
let arr = [{name: 'Baro'}, {name: 'Ąmar'}, {name: 'Ęla'}, {name: 'Ale'}];
arr.sort((a,b) => a.name.localeCompare(b.name));
Wsparcie tego API jest bardzo duże, bo 99%. Wspiera je w pełni nawet IE11 (zobacz Can I Use). Dlatego nie ma powodu, aby zawsze nie sortować tablicy z uwzględnieniem znaków z aktualnego języka (ang. locale).
Warto też zajrzeć na stronę MDN, gdzie jest pełna dokumentacja do funkcji localeCompare, która oprócz prostego wywołania, ma też masę opcji.
Komentarze
Hasło, które podasz umożliwi ponowne zalogowanie się i np. usunięcie komentarza, jest dobrowolne. Email jest szyfrowany i używany do wysyłania powiadomień o odpowiedziach do komentarzy oraz do pobierania awatara dzięki usłudze Gravatar.com.
bez locales nie posortujesz poprawnie tablicy po polsku. ustaw tablice tak: ['Baro', 'Ąlar', 'Ęla', 'Ame']. zamienione drugie litery ze sobą i to wystarcza do tego, żeby już niepoprawnie sortować.