Array.sort() nie sortuje poprawnie liczb
Już spieszę z wyjaśnieniem tego zjawiska. Otóż poniżej kod dwóch tablic, na których będziemy bazować:
const numbers = [10, 7, 12];
const words = ['krystyna', 'jarosław', 'antoni'];Zatem jak będzie wyglądał wynik sortowania pierwszej tablicy numbers?
numbers.sort(); // => Array(3) [ 10, 12, 7 ]Ale jak to? Tak właśnie sortuje liczby metoda sort(), gdy nie podamy jej żadnych argumentów.
Posortujmy zatem wyrazy alfabetycznie
Bazując na naszej drugiej tablicy words, posortujmy je alfabetycznie:
words.sort(); // => Array(3) [ "antoni", "jarosław", "krystyna" ]No proszę, w przypadku wartości typu string, metoda nie myli się.
Optional chaining, czyli bezpieczny dostęp do obiektów
Czy zdarzyło Ci się kiedyś pisać w JavaScript coś na kształt „osoba.adres.ulica.nazwa”, a po odpaleniu aplikacji powitał Cię sympatyczny komunikat „Cannot read property 'nazwa’ of undefined”? Tak, dokładnie ten, który uwielbiamy wszyscy równie mocno jak korki na autostradzie czy zagubione klucze. Na szczęście w JavaScript jest coś, co pozwoli Ci uniknąć frustracji – „optional chaining”.
Jak poprawnie sortować liczby w JS?
Sprawa jest prosta. Metoda sort() przyjmuje opcjonalnie argument tzw. komparator. Za pomocą tej funkcji możemy kontrolować porządek elementów w tablicy podczas sortowania.
numbers.sort((a, b) => {
if (a > b) {
return 1;
}
if (a < b) {
return -1;
}
return 0;
}); // => Array(3) [ 7, 10, 12 ]Teraz nasza metoda zwróciła poprawny wynik. Da się także zrobić to krócej:
numbers.sort((a, b) => a - b); // => Array(3) [ 7, 10, 12 ]
numbers.sort((a, b) => b - a); // => Array(3) [ 12, 10, 7 ]A może kawa?
👉 Przydatny wpis? To może kawa? 😀


