LBweb Łukasz Bącik
Komentarze: 0

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

  • Optional chaining, czyli bezpieczny dostęp do obiektów

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

    Zobacz więcej

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *