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ę.
Poprzedni element CSS – jak go wybrać i manipulować nim?
Jak wybrać poprzedni element CSS? Dowiedz się, jak korzystać z alternatywnych metod selekcji i jQuery do pracy z poprzednimi elementami.
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? 😀