Sobes.tech
Junior

Jak byś posortował tablicę liczb?

sobes.tech AI

Odpowiedź od AI

// Używamy metody sort() z funkcją porównawczą
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // Sortowanie rosnące

// Aby posortować malejąco:
// numbers.sort((a, b) => b - a);

Metoda sort() w JavaScript sortuje elementy tablicy na miejscu. Domyślnie konwertuje elementy na łańcuchy i sortuje je leksykograficznie. Aby poprawnie sortować liczby, należy przekazać funkcję porównawczą do sort().

Funkcja porównawcza przyjmuje dwa argumenty, a i b.

  • Jeśli funkcja zwraca liczbę ujemną, a będzie przed b.
  • Jeśli funkcja zwraca liczbę dodatnią, b będzie przed a.
  • Jeśli funkcja zwraca 0, kolejność elementów nie zmienia się.

Do sortowania liczb rosnąco używa się (a, b) => a - b. Jeśli a jest mniejsze od b, wynik jest ujemny i a idzie przed b. Do sortowania malejąco używa się (a, b) => b - a. Jeśli b jest mniejsze od a, wynik jest dodatni i b idzie przed a.

Inne metody (mniej częste dla prostych tablic numerycznych, ale przydatne):

  • Metoda localeCompare() dla łańcuchów z liczbami:

    // Niezalecane dla czystych liczb, ale może być używane
    // jeśli liczby są reprezentowane jako łańcuchy i trzeba uwzględnić lokalizację.
    const stringNumbers = ["10", "2", "1"];
    stringNumbers.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
    // Posortuje jako [ "1", "2", "10" ]
    
  • Tworzenie kopii tablicy przed sortowaniem:

    // Jeśli chcesz zachować oryginalną tablicę
    const originalNumbers = [4, 2, 5, 1, 3];
    const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
    // lub
    // const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);