Sobes.tech
Junior

Cum ați sorta un array de numere?

sobes.tech AI

Răspuns de la AI

// Folosim metoda sort() cu o funcție de comparație
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // Sortare crescătoare

// Pentru sortare descrescătoare:
// numbers.sort((a, b) => b - a);

Metoda sort() în JavaScript sortează elementele array-ului la loc. În mod implicit, convertește elementele în șiruri și le sortează lexicografic. Pentru a sorta corect numerele, trebuie să îi pasezi o funcție de comparație.

Funcția de comparație primește doi parametri, a și b.

  • Dacă funcția returnează un număr negativ, a va fi înaintea lui b.
  • Dacă returnează un număr pozitiv, b va fi înaintea lui a.
  • Dacă returnează 0, ordinea elementelor nu se schimbă.

Pentru sortarea numerelor în ordine crescătoare, se folosește (a, b) => a - b. Dacă a este mai mic decât b, rezultatul este negativ și a vine înainte. Pentru sortarea descrescătoare, se folosește (a, b) => b - a. Dacă b este mai mic decât a, rezultatul este pozitiv și b vine înainte.

Alte metode (mai puțin frecvent folosite pentru array-uri numerice simple, dar utile):

  • Metoda localeCompare() pentru șiruri cu numere:

    // Nu recomandată pentru numere pure, dar poate fi folosită
    // dacă numerele sunt reprezentate ca șiruri și trebuie să țină cont de localizare.
    const stringNumbers = ["10", "2", "1"];
    stringNumbers.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
    // Va sorta ca [ "1", "2", "10" ]
    
  • Crearea unei copii a array-ului înainte de sortare:

    // Dacă doriți să păstrați array-ul original
    const originalNumbers = [4, 2, 5, 1, 3];
    const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
    // sau
    // const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);