JavaScript-arrays sorteren

Op deze pagina wordt beschreven hoe je arrays kunt sorteren met JavaScript.

Een array is handige manier om lijsten van gelijksoortige data op te slaan. Zo kan een array een reeks getallen bevatten, of een reeks strings, of een reeks objecten.

Arrays worden vaak gebruikt om reeksen te sorteren, bijvoorbeeld:

Daarbij wordt ook nog onderscheid gemaakt tussen Alfabetisch/Lexicografisch (zoals in een woordenboek) en Numeriek (in de volgorde van getallen).


In JavaScript is een array een object. Dat is een "ding" waar je allerhande gegevens in kwijt kunt. Bij objecten horen methods. Dat zijn programmaatjes waarmee je iets met de gegevens in het object kunt doen: toevoegen, opvragen, veranderen, printen, enzovoort. Een array sorteren doe je met de method sort().

Stel: je hebt een array met getallen:
var n = new Array(3, 6, 9, 1, 4, 7).
De opdracht document.write(n.sort()) levert: 1, 3, 4, 6, 7, 9.

Opmerking:

De method sort() wijzigt de array zelf!
 
Het is niet nodig om sort() meerdere malen achtereen op de zelfde array uit te voeren (tenzij de array tussentijds is gewijzigd). Het kan echter geen kwaad.
Deze aanpak is in JavaScript niet gebruikelijk en kan daardoor voor verwarring zorgen. Wees daarop bedacht.


Een array met getallen sorteren
Bovenstaande sorteermethode kan fout gaan. Bijvoorbeeld:
var mijn_lijst = [1, 2, 5, 11, 20]
De opdracht document.write(mijn_lijst.sort() levert: 1, 11, 2, 20, 5.
Dat komt doordat sort() per default alfabetisch sorteert. Die die sortering komt 11 vóór 2 en komt 20 vóór 5.

Om dit probleem te omzeilen kun je aan sort() een parameter meegeven. Dit is een function, waarmee je de default sorteermethode kunt veranderen. Voorbeeld:

function sorteerNumeriekOplopend(a,b) { return (a - b) }

Voorbeeld:
var mijn_lijst = [1, 20, 11, 5, 2].
De opdracht document.write(mijn_lijst.sort(sorteerNumeriekOplopend(a,b)) levert:
1, 2, 5, 11, 20.

Op precies dezelfde manier kun je een getallenreeks aflopend sorteren. Je gebruikt alleen een andere function in de aanroep van sort().

function sorteerNumeriekAflopend(a,b) { return (b - a) }

Voorbeeld:
var mijn_lijst = [1, 20, 11, 5, 2].
De opdracht document.write(mijn_lijst.sort(sorteerNumeriekaflopend(a,b)) geeft nu:
20, 11, 5, 2, 1.

Je hoeft overigens geen aparte function te schrijven om de sorteermethode aan te passen:

Merk op dat deze code moeilijker leesbaar is dan wanneer je een aparte function zou gebruiken.


Een array met strings sorteren
Om een array met strings te sorteren gebruik je gewoon de method sort(), zonder parameter. Daarmee wordt alfabetisch gesorteerd, in oplopende volgorde.

Voorbeeld:
var mijn_lijst = ["Jantje","zag","eens","pruimen","hangen"]
De opdracht document.write(mijn_lijst.sort()) geeft:
eens, hangen, Jantje, pruimen, zag.

Om een array met strings in aflopende volgorde te sorteren zou je een function moeten meegeven in de parameterlijst. Een dergelijke functie zou behoorlijk ingewikkeld zijn. Daarom doe je dit in twee stappen:

Voorbeeld:
var mijn_lijst = ["Jantje","zag","eens","pruimen","hangen"]
De opdracht document.write(mijn_lijst.sort()) geeft:
eens, hangen, Jantje, pruimen, zag.

De opdracht document.write(mijn_lijst.reverse()) verandert dit in:
zag, pruimen, Jantje, hangen, eens.


Opmerking:
 
Meer informatie over het gebruiken van arrays vind je in het item Werken met Arrays.

 
terug

html-322; Laatste wijziging: 16 mei 2020