Sortowanie liczb w JavaScript

Jaka jest podstawowa metoda w JavaScript do sortowania? Oczywiście – metoda sort(), jednak nie do końca. Metoda ta sortuje poprawnie elementy alfabetyczne, ale nie liczbowe. Zaraz wyjaśnię na przykładach jak to działa i jak to zrobić poprawnie.

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ę.

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 ]
tworzenie stron www