Sobes.tech
Junior

Jak byste setřídili pole čísel?

sobes.tech AI

Odpověď od AI

// Použití metody sort() s porovnávací funkcí
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // Vzestupné řazení

// Pro sestupné řazení:
// numbers.sort((a, b) => b - a);

Metoda sort() v JavaScriptu setřídí prvky pole na místě. Ve výchozím nastavení převádí prvky na řetězce a řadí je lexikograficky. Pro správné řazení čísel je nutné předat sort() porovnávací funkci.

Porovnávací funkce přijímá dva argumenty, a a b.

  • Pokud funkce vrátí záporné číslo, a přijde před b.
  • Pokud vrátí kladné číslo, b přijde před a.
  • Pokud vrátí 0, pořadí prvků se nemění.

Pro řazení čísel vzestupně se používá (a, b) => a - b. Pokud je a menší než b, výsledek je záporný a a přijde před b. Pro řazení sestupně se používá (a, b) => b - a. Pokud je b menší než a, výsledek je kladný a b přijde před a.

Další metody (méně časté pro jednoduché číselné pole, ale užitečné):

  • Metoda localeCompare() pro řetězce s čísly:

    // Nedoporučuje se pro čistá čísla, ale může být použita
    // pokud jsou čísla reprezentována jako řetězce a je třeba zohlednit lokalitu.
    const stringNumbers = ["10", "2", "1"];
    stringNumbers.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
    // Seřadí jako [ "1", "2", "10" ]
    
  • Vytvoření kopie pole před řazením:

    // Pokud chcete zachovat původní pole
    const originalNumbers = [4, 2, 5, 1, 3];
    const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
    // nebo
    // const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);