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? 😀