Sobes.tech
Junior

Hoe zou je een array van getallen sorteren?

sobes.tech AI

Antwoord van AI

// We gebruiken de sort() methode met een vergelijkingsfunctie
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // Oplopende sortering

// Voor aflopende sortering:
// numbers.sort((a, b) => b - a);

De sort() methode in JavaScript sorteert de elementen van de array ter plekke. Standaard converteert hij de elementen naar strings en sorteert ze lexicografisch. Om nummers correct te sorteren, moet je een vergelijkingsfunctie doorgeven aan sort().

De vergelijkingsfunctie neemt twee argumenten, a en b.

  • Als de functie een negatieve waarde retourneert, komt a vóór b.
  • Als hij een positieve waarde retourneert, komt b vóór a.
  • Als hij 0 retourneert, verandert de volgorde van de elementen niet.

Voor het sorteren van nummers in oplopende volgorde wordt (a, b) => a - b gebruikt. Als a kleiner is dan b, is het resultaat negatief en komt a vóór b. Voor aflopende sortering wordt (a, b) => b - a gebruikt. Als b kleiner is dan a, is het resultaat positief en komt b vóór a.

Andere methoden (minder vaak gebruikt voor eenvoudige numerieke arrays, maar nuttig):

  • localeCompare() methode voor strings met nummers:

    // Niet aanbevolen voor pure nummers, maar kan worden gebruikt
    // als nummers als strings worden weergegeven en rekening moet worden gehouden met de locale.
    const stringNumbers = ["10", "2", "1"];
    stringNumbers.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
    // Sorteert als [ "1", "2", "10" ]
    
  • Een kopie van de array maken voordat je sorteert:

    // Als je het originele array wilt behouden
    const originalNumbers = [4, 2, 5, 1, 3];
    const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
    // of
    // const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);