Sobes.tech
Junior

Kaip surūšiuotumėte skaičių masyvą?

sobes.tech AI

Atsakymas iš AI

// Naudojame `sort()` metodą su palyginimo funkcija
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // Rūšiavimas didėjimo tvarka

// Rūšiavimui mažėjimo tvarka:
// numbers.sort((a, b) => b - a);

sort() metodas JavaScript'e rūšiuoja masyvo elementus vietoje. Pagal numatytuosius nustatymus jis paverčia elementus į eilutės ir rūšiuoja juos leksikografiškai. Norint teisingai rūšiuoti skaičius, reikia perduoti sort() funkciją palyginti.

Palyginimo funkcija priima du argumentus, a ir b.

  • Jei funkcija grąžina neigiamą skaičių, a bus prieš b.
  • Jei funkcija grąžina teigiamą skaičių, b bus prieš a.
  • Jei funkcija grąžina 0, elementų tvarka nesikeičia.

Skaičių rūšiavimui didėjimo tvarka naudojama (a, b) => a - b. Jei a yra mažesnis už b, rezultatas bus neigiamas, ir a eis prieš b. Skaičių rūšiavimui mažėjimo tvarka naudojama (a, b) => b - a. Jei b yra mažesnis už a, rezultatas bus teigiamas, ir b eis prieš a.

Kiti metodai (mažiau dažnai naudojami paprastiems skaičių masyvams, bet naudingi):

  • localeCompare() metodas su skaičiais kaip eilutėmis:

    // Neskirtas naudoti tikriems skaičiams, bet gali būti naudojamas
    // jei skaičiai pateikti kaip eilutės ir reikia atsižvelgti į lokalę.
    const stringNumbers = ["10", "2", "1"];
    stringNumbers.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
    // Rūšiuos kaip [ "1", "2", "10" ]
    
  • Masyvo kopijos sukūrimas prieš rūšiavimą:

    // Jei norite išsaugoti pradinį masyvą
    const originalNumbers = [4, 2, 5, 1, 3];
    const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
    // arba
    // const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);