Lussen en arrays in JavaScript

Leer JavaScript werk te laten herhalen en gegevenslijsten te verwerken. Schrijf for-, while- en do...while-lussen die het juiste aantal keren worden uitgevoerd, sla waarden op in arrays en voeg elementen toe, verwijder ze, zoek ze op en wijzig ze. Verwerk lijsten met for...of en met arraymethoden zoals map, filter, find en reduce, sorteer getallen en tekst in de volgorde die lezers verwachten en kopieer en combineer arrays met spreadsyntaxis zonder de oorspronkelijke arrays per ongeluk te wijzigen.

BeginnerLes 2 van 9 in Cursus JavaScript programmeren: DOM, events, asynchrone code en modules

Wat je leert

  1. Schrijf for-, while- en do...while-lussen die het juiste aantal keren worden uitgevoerd, volg ze stap voor stap en stuur ze met break en continue.
    • Tel en herhaal met een for-lus
      Schrijf een for-lus met de drie onderdelen, volg de teller van de eerste tot en met de laatste iteratie en bouw een lopend totaal op.
    • Herhaal zolang aan een voorwaarde is voldaan
      Gebruik while- en do...while-lussen als het aantal herhalingen niet van tevoren bekend is en zorg dat elke lus kan eindigen.
    • Beëindig lussen, sla iteraties over en nest lussen
      Verlaat een lus voortijdig met break, sla een iteratie over met continue en plaats een lus binnen een andere om roosters en paren te doorlopen.
  2. Maak arrays, lees en wijzig hun elementen via een index, voeg items toe en verwijder ze, en doorzoek arrays of converteer tussen arrays en tekst.
    • Maak een array en lees de elementen
      Schrijf arrayliterals, lees elementen via hun index vanaf nul en gebruik length en at() om het laatste element te bereiken.
    • Voeg elementen toe, verwijder ze en vervang ze
      Wijzig arrays binnen de bestaande array met toewijzing via een index, push, pop, shift, unshift en splice, kopieer delen met slice en onderscheid methoden die een array wijzigen van methoden die een nieuwe array teruggeven.
    • Doorzoek een array en converteer tussen arrays en tekst
      Controleer of een array een waarde bevat, zoek de positie van een waarde, vergelijk arrays correct en zet strings om in arrays en terug met split en join.
  3. Bezoek elk element van een array met for- en for...of-lussen en gebruik standaardluspatronen om totalen te berekenen, te tellen, te zoeken en resultaten op te bouwen.
    • Doorloop een array met for en for...of
      Kies tussen een for-lus met index en for...of, haal de index op wanneer je die nodig hebt en vermijd for...in en het wijzigen van de arraylengte terwijl je de array doorloopt.
    • Bereken totalen, tel, zoek en bouw resultaten op met luspatronen
      Pas de patronen voor een accumulator, teller, maximum, zoekactie en nieuwe array toe op echte gegevenslijsten en volg ze stap voor stap.
  4. Geef korte pijlfuncties door aan arraymethoden en gebruik forEach, map, filter, find, some, every en reduce om gegevens te transformeren, selecteren, doorzoeken en samen te vatten.
    • Geef een functie door aan een arraymethode
      Schrijf korte pijlfuncties, weet wat een callback ontvangt en moet teruggeven en gebruik forEach om code voor elk element uit te voeren.
    • Transformeer en selecteer elementen met map en filter
      Gebruik map om elk element in een nieuwe waarde om te zetten en filter om de elementen te behouden die aan een voorwaarde voldoen, en schakel de twee aaneen.
    • Zoek elementen en toets voorwaarden
      Gebruik find, findIndex, findLast, findLastIndex, some en every om één element te vinden of een voorwaarde voor een lijst te controleren.
    • Combineer alle elementen tot één waarde met reduce
      Gebruik reduce met een accumulator en een beginwaarde om totalen, aantallen en uiterste waarden te berekenen en volg elke stap.
  5. Sorteer getallen en tekst in de juiste volgorde, waaronder de alfabetische volgorde van de taal van de lezer, en kopieer en combineer arrays met spreadsyntaxis zonder de oorspronkelijke arrays per ongeluk te wijzigen.
    • Sorteer arrays met getallen en strings en keer de volgorde om
      Gebruik sort met een vergelijkingsfunctie, weet dat sort de array wijzigt en gebruik toSorted en toReversed om gesorteerde kopieën of kopieën in omgekeerde volgorde te krijgen.
    • Sorteer tekst en geef die weer volgens de taal van je lezers
      Vergelijk strings met localeCompare en Intl.Collator voor een natuurlijke alfabetische volgorde, bewaar datums in een sorteerbare vorm en zet arrays om in leesbare tekst met join, Intl.ListFormat en getalopmaak.
    • Kopieer en combineer arrays met spreadsyntaxis
      Begrijp dat arrayvariabelen naar een gedeelde array verwijzen en gebruik spreadsyntaxis om arrays te kopiëren, samen te voegen en in te voegen en om arrayelementen als afzonderlijke waarden aan een functie door te geven.

Lussen en arrays in JavaScript: uitleg

5 hoofdstukken

1

Herhaal code met lussen

Voor het herhalen van code zijn een duidelijk beginpunt, een controle en een manier om voortgang te maken nodig. Tellussen maken het aantal stappen zichtbaar; bij voorwaardelijke lussen bepalen de gegevens wanneer de lus stopt. Volg elke veranderende variabele om te zien wat er vóór en na een controle wordt uitgevoerd. Gebruik daarna voortijdig stoppen en geneste lussen voor zoekacties, overgeslagen waarden en paren. Kleine veranderingen in een eindpunt of bijwerking kunnen het hele resultaat veranderen.

1.1 Stuur een tellus

Een lus herhaalt een codeblok. Elke uitvoering van het lichaam is een iteratie. Je kunt het aantal herhalingen veranderen door de teller en voorwaarde van de lus te wijzigen, zonder het lichaam te kopiëren.

Lees de drie onderdelen
for (let i = 1; i <= 5; i++) {
  console.log(i);
}

Tussen de ronde haakjes staan een initialisatie, een voorwaarde en een bijwerking, gescheiden door puntkomma's. let i = 1 wordt eenmaal uitgevoerd. Daarna controleert JavaScript i <= 5. Als dat waar is, drukt het lichaam i af, telt de bijwerking i++ er 1 bij op en controleert JavaScript de voorwaarde opnieuw. Een onware voorwaarde beëindigt de lus voordat het lichaam nogmaals wordt uitgevoerd.

Waarde vóór de controleVoorwaardeActie
1trueDruk 1 af; werk bij naar 2
2, 3, 4Steeds trueDruk elke waarde af en werk bij
5trueDruk 5 af; werk bij naar 6
6falseStop

Er zijn vijf iteraties maar zes controles van de voorwaarde. Bij de laatste controle is de voorwaarde onwaar en wordt het lichaam niet uitgevoerd. Een lus waarvan de voorwaarde aan het begin onwaar is, heeft geen iteraties.

Kies de eindpunten en stapgrootte

for (let i = 0; i < 10; i++) bezoekt 0 tot en met 9. Beginnen bij 1 met i <= 10 bezoekt 1 tot en met 10. Beide worden tien keer uitgevoerd. Bij een stap van 1 van a naar b, als b minstens a is, geeft < b b - a iteraties en <= b b - a + 1.

De bijwerking kan grotere stappen nemen: for (let i = 0; i <= 20; i += 5) bezoekt 0, 5, 10, 15, 20. Achteruit tellen vereist zowel een afnemende bijwerking als een passende voorwaarde: for (let i = 3; i >= 1; i--) bezoekt 3, 2, 1. Schrijf de eerste en laatste gewenste waarde op voordat je < of <= kiest; zo herken je een grensfout van één positie.

Houd een lopend totaal bij
let total = 0;
for (let i = 1; i <= 100; i++) {
  total += i;
}
console.log(total); // 5050

total is een accumulator: die neemt het resultaat van de ene iteratie mee naar de volgende. Na de eerste drie iteraties bevat die achtereenvolgens 1, 3 en 6. Zet de declaratie vóór de lus, zodat de accumulator eenmaal wordt geïnitialiseerd. Als je de accumulator binnen het lichaam declareert, wordt die telkens opnieuw ingesteld en is die na de lus niet beschikbaar.

Onderzoek een lus die zich vreemd gedraagt

De teller in de luskop gebruikt let omdat i++ er een nieuwe waarde aan toewijst. Een teller met const laat het lichaam eenmaal uitvoeren, maar geeft bij de bijwerking een TypeError. Een let i die in de luskop is gedeclareerd, hoort bij de lus; als je die daarna uitleest, krijg je een ReferenceError, tenzij er buiten de lus een andere variabele met de naam i bestaat.

Een puntkomma direct na de luskop geeft de lus een leeg lichaam. In for (let i = 0; i < 3; i++); { console.log("Hello"); } wordt het blok eenmaal na de lus uitgevoerd. Laat de openingsaccolade aansluiten op de luskop. Controleer ten slotte de richting van de bijwerking: beginnen bij 0 met i < 5 en i-- beweegt van het stoppunt af en eindigt nooit.

Belangrijkste punten

  • De initialisatie wordt eenmaal uitgevoerd; de voorwaarde vóór elke iteratie; de bijwerking volgt op het lichaam.
  • Controleer de eerste en laatste tellerwaarde om een grensfout van één positie te herkennen.
  • Declareer een lopend totaal vóór de lus, zodat eerder werk behouden blijft.
  • Gebruik let voor een teller die verandert en laat die naar het stoppunt toe bewegen.

1.2 Herhaal totdat een voorwaarde verandert

Sommige taken eindigen wanneer een resultaat een doel bereikt, niet na een bekend aantal stappen. Een while-lus controleert die stopvoorwaarde vóór elke herhaling. Een do...while-lus controleert die na het lichaam.

Controleer eerst met while
let balance = 1000;
let years = 0;
while (balance < 1500) {
  balance = balance * 1.05;
  years++;
}
console.log(years); // 9

Het saldo groeit met 5% per jaar. Beide variabelen worden vóór de lus geïnitialiseerd. Na acht herhalingen is het saldo ongeveer 1477.46, onder het doel, dus is nog een herhaling nodig. Na negen is het ongeveer 1551.33; de volgende controle is onwaar. Behoud tijdens de berekening het volledige saldo en rond alleen het weergegeven resultaat af.

Als een while-voorwaarde aanvankelijk onwaar is, wordt het lichaam nul keer uitgevoerd. Zet bij een eenvoudige tellus de initialisatie vóór while en de bijwerking aan het einde van het lichaam. Zo behoud je het gedrag van een for-lus als er geen continue is. Met continue vraagt de bijwerking extra aandacht omdat die kan worden overgeslagen.

Voer eenmaal uit vóór de controle
let n = 4096;
let digits = 0;
do {
  n = Math.floor(n / 10);
  digits++;
} while (n > 0);
console.log(digits); // 4

Math.floor rondt naar beneden af. Hier verwijdert elke deling het laatste cijfer: 4096 wordt 409, dan 40, 4 en 0. Elke verwijdering verhoogt digits. Als je met 0 begint, wordt het lichaam nog steeds eenmaal uitgevoerd en telt het correct één cijfer. Een while (n > 0) die vooraf controleert, zou dat geval overslaan en nul cijfers melden. Deze methode om cijfers te tellen is bedoeld voor niet-negatieve gehele getallen.

LusWanneer de voorwaarde wordt gecontroleerdMinimumaantal uitvoeringen van het lichaam
whileVóór het lichaamNul
do...whileNa het lichaamEén

Met let n = 10 wordt een do...while-lichaam dat n afdrukt eenmaal uitgevoerd, ook als de voorwaarde n < 5 is. Een lus die dezelfde voorwaarde vooraf controleert, drukt niets af. De puntkomma hoort na de laatste voorwaarde in do...while.

Werk naar een uitgang toe

Een oneindige lus blijft zich herhalen zonder te eindigen. Als je n++ vergeet in let n = 0; while (n < 3) { console.log(n); }, blijft de voorwaarde altijd waar. Langlopende code kan een browsertabblad laten vastlopen. Volg wat de voorwaarde verandert en stop een vastgelopen script met de bedieningselementen van de browser.

Een samengestelde voorwaarde zoals attempts < 3 && !found gaat alleen door zolang beide controles waar zijn. De lus stopt wanneer drie pogingen zijn gebruikt of een resultaat is gevonden. Voor een niet-negatief geheel getal dat afneemt naar nul, maakt while (count > 0) het aftellen duidelijker dan while (count). Negatieve getallen zijn ook truthy, dus betekent een truthy-waarde op zichzelf niet dat een teller positief is.

Vermijd gelijkheid als stopcontrole voor decimale getallen. Tien optellingen van 0.1 geven 0.9999999999999999 in JavaScript, dus kan while (x !== 1) eindeloos voorbij het bedoelde eindpunt gaan. Een vergelijking zoals x < 1 staat toe dat de grens wordt overschreden; een teller met gehele getallen is beter wanneer precies tien stappen nodig zijn. Bereken elke decimale waarde uit die teller.

Belangrijkste punten

  • while kan nul keer worden uitgevoerd; do...while wordt altijd minstens eenmaal uitgevoerd.
  • Kies een voorwaarde op basis van wat nog moet gebeuren en wijzig vervolgens de invoer ervan in het lichaam.
  • Een samengestelde voorwaarde kan het werk stoppen wanneer een limiet is bereikt of een resultaat is gevonden.
  • Door afronding bij drijvendekommagetallen is exacte decimale gelijkheid een slechte stopcontrole.
  • Gebruik tellers met gehele getallen als het aantal herhalingen exact moet zijn.

1.3 Stop een zoekactie, sla werk over en bezoek paren

Een lus kan stoppen voordat de voorwaarde onwaar wordt of werk voor slechts één item overslaan. Met geneste lussen kun je een reeks binnen een andere herhalen, bijvoorbeeld bij het bezoeken van rijen en kolommen.

Break of continue

break verlaat de bijbehorende lus onmiddellijk. Om het eerste veelvoud van 7 boven 50 te vinden:

for (let n = 51; n <= 100; n++) {
  if (n % 7 === 0) {
    console.log(n); // 56
    break;
  }
}

Na het afdrukken van 56 gaat de uitvoering na de lus verder. De waarden 57 tot en met 100 worden nooit gecontroleerd. while (true) kan hetzelfde patroon gebruiken wanneer de uitgang het gemakkelijkst binnen het lichaam te controleren is; een bereikbare break moet de uitgang bieden.

continue slaat de rest van de huidige iteratie over. In een for-lus wordt de bijwerking in de luskop nog wel uitgevoerd voordat de voorwaarde opnieuw wordt gecontroleerd:

for (let i = 1; i <= 9; i++) {
  if (i % 2 === 0) continue;
  console.log(i);
}

Bij de even waarden wordt het afdrukken overgeslagen, dus is de uitvoer 1, 3, 5, 7, 9. Als je continue door break vervangt, eindigt de lus bij 2 en wordt alleen 1 afgedrukt.

In een while-lus springt continue direct naar de voorwaarde. Een bijwerking die later in het lichaam staat, wordt overgeslagen. Als i gelijk is aan 2 en het lichaam begint met if (i === 2) continue;, kan de lus voor altijd op die waarde blijven steken. Zet de benodigde bijwerking vóór die sprong of gebruik for om te tellen.

Herhaal een binnenste lus voor elke rij
for (let row = 1; row <= 3; row++) {
  let line = "";
  for (let col = 1; col <= 4; col++) {
    line = line + (row * col) + " ";
  }
  console.log(line.trim());
}

Voor row = 1 bezoekt de binnenste lus kolommen 1 tot en met 4 en bouwt de tekst “1 2 3 4” op. Voor rij 2 begint de lus opnieuw bij kolom 1 en produceert “2 4 6 8”. Rij 3 produceert “3 6 9 12”. Het binnenste lichaam wordt twaalf keer uitgevoerd: vier kolommen voor elk van de drie rijen. Declareer line binnen het buitenste lichaam, zodat elke rij met een lege string begint.

Gebruik verschillende namen voor de tellers. Een binnenste let i overschaduwt een buitenste i, waardoor het lastig wordt beide posities uit te lezen.

Bezoek elk verschillend paar eenmaal

Begin voor vier personen met de nummers 0 tot en met 3 de binnenste teller bij i + 1:

for (let i = 0; i < 4; i++) {
  for (let j = i + 1; j < 4; j++) {
    console.log(i, j);
  }
}

De paren zijn 0–1, 0–2, 0–3, 1–2, 1–3, 2–3: zes bezoeken. Als j bij 0 begint, zijn er zestien bezoeken, waaronder paren van een persoon met zichzelf en omgekeerde herhalingen.

Een gewone break verlaat alleen de binnenste lus. Om een volledige geneste zoekactie te beëindigen, geef je de buitenste lus een label, bijvoorbeeld outer: for (...), en gebruik je bij de overeenkomst break outer;. Het label noemt de lus die moet worden verlaten; het verandert niet de volgorde waarin de paren worden gecontroleerd.

Belangrijkste punten

  • break beëindigt een lus; continue slaat de rest van één iteratie over.
  • continue laat een bijwerking van een for-lus uitvoeren, maar kan een bijwerking binnen een while-lichaam overslaan.
  • De binnenste lus begint opnieuw voor elke iteratie van de buitenste lus.
  • Gebruik j = i + 1 om elk verschillend paar eenmaal te bezoeken.
  • Een gewone break verlaat de binnenste lus.
  • Een break met een label kan ook een buitenste lus verlaten.
2

Sla gegevenslijsten op in arrays en wijzig ze

Een lijst heeft zowel waarden als posities. Arrays houden die waarden bij elkaar en geven elke waarde een genummerde index. Het lezen, vervangen, invoegen en verwijderen van elementen hangt allemaal af van die posities, en door wijzigingen kunnen latere elementen nieuwe indexen krijgen. Leer zowel wat elke methode teruggeeft als wat die wijzigt en kies daarna zoekacties en tekstconversies die de resultaatvorm opleveren die de volgende stap nodig heeft.

2.1 Lees waarden en posities in een array

Een array slaat een geordende lijst op onder één naam. De waarden heten elementen. Een arrayliteral gebruikt blokhaken en komma's: const temps = [18, 21, 19, 24];. De literal [] maakt een lege array.

Tel posities vanaf nul
const colors = ["red", "green", "blue"];
console.log(colors[0]); // "red"
console.log(colors[2]); // "blue"
console.log(colors.length); // 3

De index van een element is de positie geteld vanaf nul. Het derde element heeft index 2. length telt geïndexeerde posities, inclusief eventuele lege posities. Voor deze array zonder gaten is het ook het aantal elementen. De laatste index is colors.length - 1, dus colors[colors.length - 1] leest “blue”.

Als je colors[colors.length] uitleest, vraag je om index 3, één positie voorbij het einde, en krijg je undefined. Een ontbrekende index geeft niet alleen omdat die ontbreekt een fout. Ook colors[5] geeft undefined.

Lees vanaf het einde

colors.at(-1) leest het laatste element en colors.at(-2) het element daarvoor. Niet-negatieve indexen werken zoals gewoonlijk: colors.at(0) leest “red”. Een negatief getal tussen blokhaken heeft een andere betekenis: colors[-1] telt niet vanaf het einde en geeft voor deze array undefined.

ExpressieResultaat
colors[1]"green"
colors.at(-1)"blue"
colors[3]undefined
colors[-1]undefined
Lees een lijst binnen een lijst

Een element kan zelf een array zijn:

const grid = [[1, 2, 3], [4, 5, 6]];
console.log(grid[1]); // [4, 5, 6]
console.log(grid[1][0]); // 4

De eerste index selecteert een rij. De tweede selecteert een waarde binnen die rij. grid.length is 2, terwijl grid[0].length gelijk is aan 3. Deze lengtes beschrijven verschillende arrays. Rijen in een geneste array kunnen verschillende lengtes hebben.

Arrays kunnen typen mengen, zoals in [42, "km", true]. Een lijst met één soort gegevens, zoals temperaturen, is gemakkelijker te verwerken omdat je elk element op dezelfde manier kunt behandelen.

Herken een array en voorkom verrassingen met lege posities

typeof [1, 2] geeft “object” terug en is dus geen specifieke controle op arrays. Gebruik Array.isArray(value): dat geeft true terug voor [1, 2] en false voor “12”.

new Array(3) maakt drie lege posities; het slaat niet het enkele getal 3 op. Gebruik [3] voor één element of [0, 0, 0] voor drie expliciete nullen. Een lege positie levert bij uitlezen undefined op, maar is een gat, geen expliciet opgeslagen waarde. Met arrayliterals maak je de bedoelde inhoud duidelijk.

Lees strings zonder ze ter plaatse te proberen te wijzigen

Strings ondersteunen ook indexering, length en at(). "hello"[1] is “e” en "hello".at(-1) is “o”. Strings zijn onveranderlijk: een toewijzing aan een tekenpositie vervangt het teken niet. In de strikte modus, waaronder JavaScript-modules, geeft die toewijzing een TypeError. Bouw een nieuwe string als tekst moet veranderen.

Belangrijkste punten

  • Indexen beginnen bij 0; de laatste index is length - 1.
  • at(-1) leest het laatste element; arr[-1] niet.
  • Lees geneste arrays één index tegelijk.
  • Gebruik Array.isArray om arrays te herkennen.
  • Arrayliterals maken onderscheid tussen opgeslagen waarden en lege posities.

2.2 Wijzig een array of kopieer een deel ervan

Het wijzigen van een bestaande array heet mutatie. Sommige methoden wijzigen de array; andere geven een nieuwe array terug. De retourwaarde van een methode kan ook een lengte of een verwijderd element zijn, dus controleer zowel de array als het resultaat van de aanroep.

Vervang elementen en wijzig de uiteinden
const scores = [70, 80, 90];
scores[1] = 85;
console.log(scores); // [70, 85, 90]

const zorgt dat scores naar dezelfde array blijft verwijzen. Het bevriest de inhoud van die array niet. De toewijzing scores = [] zou een TypeError geven, maar toewijzing via een index is toegestaan.

MethodeWijzigingRetourwaarde
push(...items)Voeg toe aan het eindeNieuwe lengte
pop()Verwijder van het eindeVerwijderd element
unshift(...items)Voeg toe aan het beginNieuwe lengte
shift()Verwijder van het beginVerwijderd element

Voor const queue = ["Ana", "Ben"]; geeft queue.push("Cleo") de waarde 3 terug. De array wordt ["Ana", "Ben", "Cleo"]. Daarna geeft queue.pop() “Cleo” terug en blijven de eerste twee namen over. Als je het resultaat van een aanroep van push opslaat, sla je de lengte als getal op, niet de bijgewerkte array. pop en shift geven undefined terug bij een lege array. Toevoegen of verwijderen aan het begin verschuift ook de andere indexen, wat bij lange arrays meer werk kan kosten.

Voeg in en verwijder in het midden

splice(start, deleteCount, ...items) wijzigt de array en geeft een array met verwijderde elementen terug:

const days = ["Mon", "Tue", "Thu", "Fri"];
const removed = days.splice(2, 0, "Wed");
// days: ["Mon", "Tue", "Wed", "Thu", "Fri"]
// removed: []
const nextRemoved = days.splice(1, 2);
// days: ["Mon", "Thu", "Fri"]
// nextRemoved: ["Tue", "Wed"]

De eerste aanroep begint bij index 2, verwijdert nul items en voegt daar “Wed” in. De tweede begint bij index 1 en verwijdert twee items. Het tweede argument is een aantal, geen eindindex. Elementen na een invoeging of verwijdering krijgen nieuwe indexen.

Kopieer een bereik met slice

slice(start, end) geeft een nieuwe array terug en sluit de eindindex uit. Voor const t = [10, 20, 30, 40, 50]; geeft t.slice(1, 3) de waarde [20, 30] en laat t ongewijzigd. t.slice(-2) kopieert de laatste twee elementen, [40, 50]. Zonder argumenten kopieert t.slice() de hele array. De extra letter in splice duidt op een andere bewerking: die wijzigt de oorspronkelijke array; slice kopieert een bereik.

Houd de lijst vrij van onbedoelde gaten

Als je voorbij het einde schrijft, ontstaan lege posities. Na const a = [1, 2]; a[4] = 5; is de lengte 5 en zijn indexen 2 en 3 gaten. Ook delete a[i] laat een gat achter en behoudt de lengte. Gebruik push om aan het einde toe te voegen en splice(i, 1) om een element te verwijderen en het gat te sluiten.

Een kleinere length toewijzen verwijdert elementen van het einde. a.length = 0 maakt de array leeg. De verwijderde elementen verschijnen niet opnieuw als de lengte later wordt vergroot.

Ook sort en reverse wijzigen arrays. Kopieermethoden zijn onder andere slice, concat, map, filter, toSorted, toReversed, toSpliced en with. Wanneer een methode een nieuwe array teruggeeft, sla je dat resultaat op of gebruik je het; de oorspronkelijke array bevat nog steeds de eerdere inhoud.

Belangrijkste punten

  • const voorkomt hertoewijzing van de variabele, maar staat mutatie van de array toe.
  • push en unshift geven lengtes terug; pop en shift geven verwijderde elementen terug.
  • splice wijzigt de bestaande array en geeft de verwijderde elementen terug.
  • slice kopieert een bereik zonder de eindindex mee te nemen.
  • delete laat een gat achter; splice(i, 1) sluit het.
  • Een kleinere length instellen verwijdert elementen van het einde.
  • Bewaar het resultaat van een kopieermethode wanneer je de nieuwe array nodig hebt.

2.3 Zoek waarden en zet lijsten om in tekst

Een zoekactie kan een ja/nee-resultaat of de positie van een element nodig hebben. Tekstconversie heeft een ander doel: de vorm van gegevens veranderen zodat een lijst kan worden gelezen, opgeslagen of verwerkt.

Vraag of iets aanwezig is of waar het staat

includes(value) geeft een booleaanse waarde terug. ["tea", "coffee"].includes("tea") is true; als je de zoekopdracht verandert in “Tea”, krijg je false. Tekst vergelijken is hoofdlettergevoelig en typen zijn van belang: [5].includes("5") is false.

indexOf(value) geeft de eerste overeenkomende index terug, of -1 wanneer geen waarde overeenkomt. lastIndexOf zoekt vanaf het einde. In [3, 7, 3, 9] staat de eerste 3 op index 0 en de laatste op index 2. Zoeken naar 5 geeft -1 terug.

Schrijf geen if (arr.indexOf(x)). Index 0 is falsy, terwijl -1 truthy is: die controle wijst een overeenkomst aan het begin af en accepteert een ontbrekende waarde. Gebruik arr.indexOf(x) !== -1, of gebruik includes als de positie niet nodig is.

Voor gewone waarden vereisen beide methoden hetzelfde type en dezelfde waarde, net als strikte gelijkheid. Ze behandelen NaN verschillend: [1, NaN].includes(NaN) is true, maar [1, NaN].indexOf(NaN) is -1. De gelijkheidsregel van includes kan NaN aan zichzelf gelijkstellen.

Vergelijk inhoud bewust

Twee afzonderlijk gemaakte arrays zijn verschillende arrays, ook wanneer hun elementen overeenkomen. [1, 2] === [1, 2] is false; ook == vergelijkt array-identiteit. Om dezelfde geordende inhoud te controleren, vergelijk je de lengtes en daarna de waarden op elke overeenkomstige index. Alleen met een ja/nee-controle op aanwezigheid stel je niet vast dat de volgorde en het aantal herhalingen gelijk zijn.

Voeg elementen samen tot een string
const dateParts = ["2026", "03", "15"];
console.log(dateParts.join("-")); // "2026-03-15"
console.log([1, 2, 3].join()); // "1,2,3"
console.log([1, 2, 3].join("")); // "123"

join plaatst het scheidingsteken tussen de elementen, nooit na het laatste. Het standaardscheidingsteken is een komma zonder spaties. Elementen met null en undefined leveren lege tekst op. Kies het scheidingsteken expliciet voor leesbare uitvoer.

Als je + met een string gebruikt, wordt een array ook omgezet in tekst, maar met komma's: "List: " + [1, 2] wordt “List: 1,2”. Geneste structuur gaat in die tekst verloren: String([1, [2, 3]]) geeft “1,2,3”. Log de array zelf om de structuur te bekijken.

Splits tekst in delen

"red,green,blue".split(",") geeft ["red", "green", "blue"] terug. Het scheidingsteken moet exact overeenkomen. Als je “red, green” alleen op een komma splitst, blijft de spatie aan het begin van “ green” staan; als je op “, ” splitst, worden de komma en die spatie verwijderd.

"4,8,15".split(",") geeft strings terug, geen getallen. Converteer elk deel voordat je getalswaarden optelt. Anders kan de operator + tekst samenvoegen in plaats van een totaal te berekenen.

Voor eenvoudige tekst op basis van letters produceert "stressed".split("").reverse().join("") “desserts”. De splitsing maakt een nieuwe array, het omkeren wijzigt die array en het samenvoegen bouwt opnieuw een string op. Een leeg scheidingsteken splitst UTF-16-code-eenheden; sommige symbolen gebruiken meer dan één eenheid, dus is dit geen algemene manier om alle leesbare tekst om te keren.

Belangrijkste punten

  • Gebruik includes voor aanwezigheid en indexOf of lastIndexOf voor posities.
  • Vergelijk een zoekindex met -1; gebruik de truthy-waarde niet.
  • Afzonderlijke arrays worden op identiteit vergeleken, ook als hun waarden er identiek uitzien.
  • join maakt tekst; split maakt een array van strings.
  • Spaties horen alleen bij het scheidingsteken als je ze expliciet toevoegt.
  • Converteer numerieke tekst voordat je ermee rekent.
3

Doorloop arrays met lussen

Een lijst doorlopen is gemakkelijker als de lus de juiste informatie beschikbaar maakt. Soms heeft het lichaam alleen elke waarde nodig; soms heeft het een index, een vorige waarde of een achterwaartse route door de array nodig. Bouw herbruikbare patronen voor totalen, aantallen, zoekacties en nieuwe lijsten en bekijk hoe elk resultaat na een iteratie verandert. Deze patronen verklaren ook de arraymethoden die volgen.

3.1 Bezoek arraywaarden zonder ze over te slaan

Een lus kan arrayposities bezoeken of de waarden rechtstreeks nemen. Kies de vorm die de informatie beschikbaar maakt die het lichaam nodig heeft. Houd rekening met veranderende indexen van de array wanneer je elementen invoegt of verwijdert.

Gebruik indexen voor posities en richting
const fruits = ["apple", "pear", "plum"];
for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

De indexen zijn 0, 1, 2. De controle is < fruits.length, omdat index 3 voorbij het einde ligt. Met <= zou een extra iteratie undefined uitlezen. Lussen met index kunnen ook achteruit lopen, beginnend bij fruits.length - 1 en doorgaand zolang i >= 0, of elk tweede element bezoeken met i += 2.

Gebruik for...of voor waarden
for (const fruit of fruits) {
  console.log(fruit.toUpperCase());
}

Dit drukt “APPLE”, “PEAR” en “PLUM” af. fruit bevat één waarde per iteratie. const werkt omdat elke iteratie een nieuwe binding maakt; de lus wijst geen nieuwe waarde toe aan één gedeelde teller. for...of werkt ook op strings. Een lus over “banana” kan klinkers tellen door voor elke ch "aeiou".includes(ch) te controleren.

Een lokaal getal wijzigen schrijft niet naar de array. Na for (let n of nums) { n = n * 2; } zijn de numerieke elementen van nums ongewijzigd. Om ze te wijzigen, wijs je waarden toe via nums[i] of bouw je een nieuwe array met verdubbelde getallen.

Haal waarden en indexen samen op

entries() levert paren met een index en een waarde. Blokhaken in de luskop pakken elk paar uit:

for (const [i, fruit] of fruits.entries()) {
  console.log((i + 1) + ". " + fruit);
}

De uitvoer is “1. apple”, “2. pear”, “3. plum”. Arrayindexen beginnen nog steeds bij nul; i + 1 verandert alleen de weergegeven nummering.

NodigHandige lus
Elke waarde op volgordefor...of
Posities, omgekeerde volgorde of aangrenzende elementenfor met index
Waarde en index samenfor...of over entries()

for...in bezoekt eigenschapsnamen. Bij arrays zijn de indexen strings en kan de lus extra eigenschappen bevatten. Gebruik de bovenstaande vormen om arrayelementen te verwerken.

Voorkom dat verschoven elementen worden overgeslagen
const nums = [2, 4, 5, 6];
for (let i = 0; i < nums.length; i++) {
  if (nums[i] % 2 === 0) nums.splice(i, 1);
}
// nums is [4, 5]

Op index 0 schuift door het verwijderen van 2 de waarde 4 naar index 0. De bijwerking verplaatst i naar 1, dus wordt 4 overgeslagen. De lus ziet daarna 5 en verwijdert 6. Het resultaat bevat nog steeds een even getal.

Als je op index verwijdert, loop dan vanaf het einde achteruit. Door een element te verwijderen verschuiven dan alleen posities die al zijn bezocht. Een andere aanpak is een nieuwe array bouwen met de waarden die je wilt behouden. Voeg geen elementen toe aan dezelfde array terwijl de stopcontrole van de lus van de lengte afhangt; het eindpunt kan blijven opschuiven.

Belangrijkste punten

  • Bezoek indexen vanaf 0 zolang i < arr.length.
  • Gebruik for...of als alleen waarden nodig zijn.
  • entries() levert index-waardeparen.
  • Een lokale numerieke lusvariabele een nieuwe waarde geven vervangt geen arrayelement.
  • Bij vooruit verwijderen kun je verschoven elementen overslaan; loop achteruit of bouw een nieuwe array.

3.2 Bouw totalen, zoekacties en nieuwe lijsten op

Veel taken met arrays gebruiken dezelfde kleine luspatronen. Bepaal welk resultaat je nodig hebt, kies de beginwaarde en werk het resultaat eenmaal bij voor elk relevant element. Door de uitvoering te volgen, zie je wat het resultaat na elke stap betekent.

Tel waarden op en tel overeenkomsten
const temps = [18, 21, 19, 24];
let sum = 0;
let warm = 0;
for (const t of temps) {
  sum += t;
  if (t > 20) warm++;
}

sum telt elke temperatuur op; warm telt er alleen één bij op voor een temperatuur boven 20 °C. Ze houden verschillende grootheden bij. Dat onderscheid wordt zichtbaar als je de uitvoering volgt:

tsum na optellenwarm na controle
18180
21391
19581
24822

Het gemiddelde is sum / temps.length, wat 20,5 °C geeft. Controleer de lengte voordat je deelt: een lege array geeft 0 / 0, wat NaN is en geen betekenisvol gemiddelde.

Houd een grootste of kleinste waarde bij

Initialiseer bij een niet-lege array het maximum met het eerste element. Vervang het daarna alleen wanneer je een grotere waarde vindt:

const values = [-3, -7, -1, -5];
let max = values[0];
for (const n of values) {
  if (n > max) max = n;
}
// max is -1

Als je bij nul begint, blijft bij een lijst met alleen negatieve waarden ten onrechte nul staan. Beginnen bij -Infinity werkt ook voor een maximum, maar bij een lege invoer blijft dan die beginwaarde staan. Voor een minimum keer je de vergelijking om en kies je het eerste element of Infinity als beginwaarde.

Zoek een eerste overeenkomst of controleer een hele lijst

Een zoekactie slaat een overeenkomst op en verlaat de lus met break. Met let firstWarm; kan de lus bij de eerste t > 20 de toewijzing firstWarm = t uitvoeren en stoppen. De lus vindt 21 en controleert de latere elementen niet. Als niets overeenkomt, blijft de variabele undefined.

Voor een controle of “alle” elementen voldoen, begin je een vlag met true en stel je die bij de eerste mislukte controle in op false. Voor een controle of “minstens één” element voldoet, begin je met false en stel je de vlag bij de eerste geslaagde controle in op true. Als een score vanaf 50 voldoende is, slaagt [72, 85, 49] bij 49 niet voor de controle of alle scores voldoende zijn. Bij een lege lijst blijft de beginwaarde van de vlag ongewijzigd.

Bouw gewijzigde waarden op en vergelijk aangrenzende elementen
const km = [1.5, 3, 0.25];
const meters = [];
for (const d of km) {
  meters.push(d * 1000);
}
// meters is [1500, 3000, 250]

De nieuwe array begint leeg en ontvangt per iteratie één omgerekende afstand. Zet een voorwaarde vóór push als slechts enkele waarden in het resultaat thuishoren.

Begin voor veranderingen van dag tot dag bij index 1, omdat index 0 geen vorige dag heeft:

const changes = [];
for (let i = 1; i < temps.length; i++) {
  changes.push(temps[i] - temps[i - 1]);
}
// changes is [3, -2, 5]

Er is één verschil minder dan er metingen zijn. Als je in de omgekeerde volgorde aftrekt, keert elk teken om. Dezelfde resultaatvormen komen terug bij arraymethoden: map bouwt getransformeerde waarden op, filter behoudt overeenkomende elementen, find zoekt, some en every controleren en reduce verzamelt waarden. Een lus blijft nuttig wanneer je bij één keer doorlopen meerdere resultaten nodig hebt, zoals bij sum en warm.

Belangrijkste punten

  • Begin totalen en aantallen bij nul en werk elk bij voor het eigen doel.
  • Initialiseer een uiterste waarde met een waarde uit de gegevens of met een passende oneindige waarde.
  • Een zoekactie naar de eerste overeenkomst stopt met break.
  • Vlaggen voor controles op alle of minstens één element beginnen met tegengestelde booleaanse waarden.
  • Bouw een nieuwe array met push om de oorspronkelijke array te behouden.
  • Begin vergelijkingen van aangrenzende elementen bij index 1.
  • Volg veranderende variabelen om te vinden waar een resultaat voor het eerst misgaat.
4

Verwerk arrays met methoden die callbacks gebruiken

Met arraymethoden kun je een korte functie laten beschrijven wat er met elke waarde moet gebeuren. De methode regelt het doorlopen, terwijl de callback een transformatie, een controle of het volgende tussenresultaat levert. Lees de teruggegeven waarde zorgvuldig: die kan een array, een element, een index, een booleaanse waarde of een totaal zijn. Dezelfde paar regels voor callbacks ondersteunen al deze taken, ook voor betrouwbaar gedrag bij een lege lijst.

4.1 Geef een callback aan een arraymethode

Een functie ontvangt invoer, voert code uit en kan een resultaat teruggeven. Een callback is een functie die aan een andere functie wordt doorgegeven om te worden aangeroepen. Arraymethoden gebruiken callbacks om het werk voor elk element te beschrijven.

Schrijf een korte pijlfunctie

n => n * 2 ontvangt een parameter met de naam n en geeft de verdubbelde waarde terug. De pijl scheidt de invoer van het lichaam. Bij één parameter mogen de ronde haakjes worden weggelaten. Bij nul of meerdere parameters zijn ze nodig: () => 0 en (a, b) => a - b.

const double = n => n * 2;
const doubled = [1, 2, 3].map(double);
// doubled is [2, 4, 6]

double is de naam van de functie zelf. De methode roept die met elk getal aan. Als je map(double()) schrijft, roep je de functie direct aan en geef je het resultaat door in plaats van de functie. Gebruik bij een benoemde controle zoals function isEven(n) { return n % 2 === 0; } de aanroep filter(isEven) om de methode elk element te laten doorgeven.

Geef een waarde terug vanuit een instructieblok

Een expressie na de pijl wordt automatisch teruggegeven. Accolades maken een blok, dus heeft een resultaat een expliciete return nodig:

const double = n => {
  const doubled = n * 2;
  return doubled;
};

Zonder return geeft de functie undefined terug. [1, 2, 3].map(n => { n * 2; }) levert daarom [undefined, undefined, undefined] op. De vermenigvuldiging wordt uitgevoerd, maar de waarde wordt nooit het resultaat van de callback.

Lees callbackargumenten op basis van hun positie

Methoden zoals map, filter en forEach geven eerst het element door, als tweede de index vanaf nul en als derde de hele array. In (name, i) => ... kies je de namen zelf; hun posities bepalen wat ze ontvangen. Laat ongebruikte parameters aan het einde weg. Andere methoden hebben andere parameterlijsten: reduce ontvangt ook een accumulator en een sorteer­callback ontvangt twee waarden om te vergelijken.

Gebruik forEach voor acties
const letters = ["a", "b"];
const result = letters.forEach((letter, i) => {
  console.log(i + ": " + letter);
});
// Prints "0: a" and "1: b".
// result is undefined.

Afdrukken is een neveneffect: een actie die tijdens de uitvoering van de callback plaatsvindt. forEach gooit retourwaarden van callbacks weg en geeft zelf undefined terug. Gebruik map als je een nieuwe array met resultaten nodig hebt. Een waarde teruggeven vanuit een forEach-callback verandert die regel niet.

Een return in deze callback beëindigt alleen de huidige aanroep; de methode gaat verder met het volgende element. Je kunt break niet binnen een callback gebruiken om forEach te verlaten. Kies for...of met break, of een zoekmethode zoals find of some, wanneer later werk bij een overeenkomst moet stoppen.

Deze callbackmethoden wijzigen de bronarray niet zelf. De callback kan die nog wel muteren, bijvoorbeeld via een toewijzing met een index of push. Als callbacks zich richten op hun retourwaarde of bedoelde actie, is het gemakkelijker te beredeneren wat de bronarray daarna bevat.

Belangrijkste punten

  • Geef de callbackfunctie zelf door, zonder die eerst aan te roepen.
  • Een expressie als functielichaam geeft de waarde automatisch terug; een instructieblok als functielichaam heeft return nodig.
  • De posities van callbackparameters bepalen hun betekenis.
  • forEach voert acties uit en geeft undefined terug.

4.2 Transformeer elke waarde of behoud overeenkomende waarden

Kies een arraymethode op basis van de vorm van het resultaat. map levert een waarde voor elk aanwezig element. filter behoudt de oorspronkelijke elementen die aan een voorwaarde voldoen. Beide geven nieuwe arrays terug.

Transformeer met map
const km = [1.5, 3, 0.25];
const meters = km.map(d => d * 1000);
// meters is [1500, 3000, 250]; km is unchanged.

De retourwaarde van de callback wordt het element op de overeenkomstige positie. Bij invoer zonder gaten wordt de callback eenmaal per element aangeroepen en heeft het resultaat dezelfde lengte. Stringelementen transformeren werkt ook: ["ana", "ben"].map(s => s.toUpperCase()) geeft ["ANA", "BEN"].

De tweede callbackparameter geeft de index. ["Ana", "Ben"].map((name, i) => (i + 1) + ". " + name) bouwt ["1. Ana", "2. Ben"] op. Als de callback een instructieblok als lichaam heeft, geef je de op te slaan waarde expliciet terug.

Selecteer met filter
const temps = [18, 21, 19, 24];
const warm = temps.filter(t => t > 20);
// warm is [21, 24]

filter behoudt een element wanneer de callback een truthy-resultaat teruggeeft. De methode behoudt het element zelf, niet de booleaanse waarde van de callback. De behouden waarden blijven in hun oorspronkelijke volgorde. Het resultaat kan alle, enkele of geen elementen bevatten; temps.filter(t => t > 30) is [].

Geef niet het element zelf terug wanneer nul een geldige waarde is. [0, 5, 0, 3].filter(n => n) laat beide nullen weg omdat ze falsy zijn. Een voorwaarde zoals n !== null verwijdert ontbrekende metingen die door null worden voorgesteld, terwijl nul behouden blijft. Geef de werkelijke regel aan om een element te behouden.

Benodigd resultaatMethode
Eén getransformeerde waarde per elementmap
Alle oorspronkelijke elementen die aan een voorwaarde voldoenfilter
Enkele elementen, daarna getransformeerdfilter gevolgd door map

Als je map gebruikt met een voorwaardelijke expressie die undefined teruggeeft voor afgewezen elementen, worden die niet verwijderd. Die resultaten met undefined nemen nog steeds posities in de nieuwe array in.

Volg een keten van links naar rechts

[12, 7, 30, 4].filter(n => n >= 10).map(n => n / 2) maakt eerst [12, 30] en daarna [6, 15]. De tweede callback ontvangt alleen de behouden elementen. Eerst filteren is passend wanneer de controle naar de oorspronkelijke waarden verwijst. Als je de volgorde verandert, kan veranderen wat de controle te zien krijgt.

Converteer numerieke tekst bewust
const numbers = "4,8,15".split(",").map(Number);
// numbers is [4, 8, 15]

Number ontvangt elk tekstdeel en levert een getal op. parseInt rechtstreeks doorgeven is een valkuil: het tweede argument is een grondtal, terwijl map daar de index doorgeeft. ["10", "10", "10"].map(parseInt) geeft [10, NaN, 2]. Gebruik map(s => parseInt(s, 10)) om het grondtal vast te zetten, of map(Number) voor deze strings met gehele getallen.

Noch map noch filter vervangt de bronarray. Alleen temps.map(t => t + 1); schrijven gooit de nieuw berekende array weg. Sla die op, geef die terug vanuit een functie of gebruik die in een keten.

Belangrijkste punten

  • map geeft getransformeerde waarden terug in een nieuwe array van dezelfde lengte.
  • filter geeft overeenkomende oorspronkelijke elementen terug in hun bestaande volgorde.
  • Een filtercontrole moet de bedoelde regel uitdrukken, zodat geldige nullen behouden blijven.
  • Aaneengeschakelde callbacks werken op het resultaat van de vorige methode.
  • Gebruik Number of een omhullende functie met één argument in plaats van map(parseInt).
  • Sla de nieuwe array op of gebruik die; de bronarray blijft ongewijzigd.

4.3 Zoek één overeenkomst en controleer op één of alle elementen

Sommige vragen vereisen één waarde, andere een positie of een ja/nee-antwoord. Zoekmethoden kunnen stoppen zodra dat antwoord bekend is. Door het juiste retourtype te kiezen, kun je latere voorwaarden gemakkelijker correct schrijven.

Kies een waarde of een index
const temps = [18, 21, 19, 24];
console.log(temps.find(t => t > 20)); // 21
console.log(temps.findIndex(t => t > 20)); // 1
console.log(temps.findLast(t => t > 20)); // 24
console.log(temps.findLastIndex(t => t > 20)); // 3

find zoekt vanaf het begin en geeft het eerste overeenkomende element terug. findIndex geeft de index daarvan terug. De vormen met Last zoeken achteruit. Alle vier stoppen wanneer ze de gevraagde overeenkomst vinden.

MethodeResultaat bij overeenkomstResultaat zonder overeenkomst
find, findLastElementundefined
findIndex, findLastIndexIndex-1
filterArray met alle overeenkomsten[]

temps.find(t => t > 30) geeft undefined terug; temps.findIndex(t => t > 30) geeft -1 terug. Controleer i !== -1 voordat je een gevonden index aan splice doorgeeft. Anders verwijdert splice(-1, 1) het laatste element, ook al is er geen overeenkomst gevonden.

Behoud falsy-overeenkomsten

[3, 0, 5].find(n => n < 1) geeft 0 terug, een geslaagde overeenkomst. if (result) behandelt die ten onrechte als een mislukking omdat nul falsy is. Voor numerieke gegevens maakt result !== undefined onderscheid tussen nul en geen overeenkomst. Als een array zelf undefined als overeenkomende waarde kan bevatten, gebruik dan findIndex en vergelijk het resultaat met -1; de waarde alleen kan die gevallen niet onderscheiden.

filter is geschikt als alle overeenkomsten nodig zijn. [5, 12, 8, 130].filter(n => n > 10) geeft [12, 130]; find geeft alleen 12 terug. Als je filter(...)[0] gebruikt, wordt de volledige array met overeenkomsten berekend voordat de eerste waarde wordt gelezen.

Controleer op minstens één of alle elementen
const scores = [72, 85, 49];
const anyFailed = scores.some(s => s < 50); // true
const allPassed = scores.every(s => s >= 50); // false

some stopt bij de eerste geslaagde controle. every stopt bij de eerste mislukte controle. Hun antwoorden zijn booleaanse waarden, geen elementen. Bij deze aanroepen laat de 49 de controle met some slagen en die met every mislukken.

Voor een lege array geeft some false terug omdat niets voldoet. every geeft true terug omdat niets niet voldoet. Als een volledige verzameling resultaten minstens één score moet bevatten, combineer je de controles: scores.length > 0 && scores.every(s => s >= 50). De lengtevoorwaarde handelt leegte af; every controleert de elementen.

Kies exacte aanwezigheid of een eigen controle

includes("ana") zoekt precies die waarde. Een hoofdletterongevoelige zoekactie heeft een callback nodig: names.some(n => n.toLowerCase() === "ana"). Die kan zowel “Ana” als “ANA” accepteren. Gebruik includes voor een bekende waarde en een zoekactie met een callback wanneer elk element volgens een regel moet worden gecontroleerd.

Belangrijkste punten

  • Kies een waarde, index, array of booleaanse waarde op basis van het resultaat dat je nodig hebt.
  • findLast en findLastIndex zoeken vanaf het einde.
  • Vergelijk een index met -1 voordat je die gebruikt om een array te wijzigen.
  • Een falsy-element zoals 0 kan een echte overeenkomst zijn.
  • some stopt bij een geslaagde controle; every stopt bij een mislukte controle.
  • Lege arrays geven false voor some en true voor every.

4.4 Neem één resultaat mee door reduce

reduce neemt een accumulator mee van het ene element naar het volgende. De callback geeft de accumulator voor de volgende stap terug. Na het laatste element geeft de methode die eindwaarde terug.

Volg een totaal
const temps = [18, 21, 19, 24];
const total = temps.reduce((sum, t) => sum + t, 0);
// total is 82

De 0 is de beginwaarde van de accumulator. De callback ontvangt eerst sum en als tweede de huidige temperatuur t. De teruggegeven som wordt het eerste argument van de volgende aanroep.

Accumulator voorafElementTeruggegeven accumulator
01818
182139
391958
582482

Dit is hetzelfde lopende totaal als bij een lus met let sum = 0. Een callback heeft na de accumulator en het element ook optionele argumenten voor de index en de array. De parameternamen zijn vrij te kiezen, maar hun volgorde ligt vast.

Geef een bruikbare beginwaarde op

Met een beginwaarde begint de reductie bij het eerste element. Zonder beginwaarde wordt het eerste aanwezige element de accumulator en beginnen de callbackaanroepen bij het volgende aanwezige element. Bij een lege array geeft het weglaten van de beginwaarde een TypeError. [].reduce((sum, n) => sum + n, 0) geeft veilig 0 terug omdat geen callbackaanroep nodig is.

De beginwaarde bepaalt ook het soort resultaat. Gebruik 0 voor totalen of aantallen en "" voor tekst. ["a", "b", "c"].reduce((text, s) => text + s.toUpperCase(), "") bouwt “ABC” op. Een numeriek totaal dat met een string begint, kan door + per ongeluk tekst samenvoegen.

Tel en vind een uiterste waarde
const scores = [72, 85, 49];
const passed = scores.reduce(
  (count, s) => s >= 50 ? count + 1 : count,
  0
);
// passed is 2

Bij een voldoende komt er één bij; bij een onvoldoende wordt het ongewijzigde aantal teruggegeven. Elke tak levert een volgende accumulator. Geef voor een maximum de grotere waarde terug: [-3, -7, -1, -5].reduce((max, n) => n > max ? n : max, -Infinity) geeft -1. Beginnen bij nul zou verkeerd zijn voor deze lijst met alleen negatieve waarden. Lege invoer laat -Infinity staan, dus handel dat resultaat af wanneer een echt maximum nodig is.

Geef op elk pad een waarde terug

Een callback met een blok heeft return nodig. (sum, n) => { sum + n; } geeft undefined terug, dus is het eindresultaat van de reductie undefined. Een gedeeltelijk ontbrekende retourwaarde is ook gevaarlijk. Als je bij het tellen in [72, 49, 85] alleen bij een voldoende een waarde teruggeeft, krijg je eerst 1, daarna undefined bij 49 en daarna NaN wanneer bij 85 één wordt opgeteld. Geef de ongewijzigde accumulator terug wanneer een element niets bijdraagt.

Combineer bewerkingen zonder de taak te verhullen

Het totaal van de voldoende scores is scores.filter(s => s >= 50).reduce((sum, s) => sum + s, 0), wat 157 geeft. Voor een gemiddelde is een apart aantal nodig: temps.reduce((sum, t) => sum + t, 0) / temps.length geeft 20,5 °C. Controleer eerst de lengte, want lege invoer geeft na de deling NaN. Als een callback meerdere niet-gerelateerde taken gaat uitvoeren, kan een for...of-lus de veranderende resultaten duidelijker tonen.

Belangrijkste punten

  • reduce geeft eerst de accumulator en daarna het element door.
  • De callback moet op elk pad de volgende accumulator teruggeven.
  • Een expliciete beginwaarde maakt het gedrag bij lege invoer voorspelbaar.
  • Kies de beginwaarde op basis van het resultaat: totaal, aantal, tekst of uiterste waarde.
  • Een gemiddelde heeft zowel een totaal als een aantal ongelijk aan nul nodig.
5

Sorteer, kopieer en combineer arrays

Een lijst ordenen en een lijst kopiëren zijn afzonderlijke keuzes. Voor het sorteren van getallen zijn andere vergelijkingsregels nodig dan voor een lijst met namen, en de taal beïnvloedt de volgorde die lezers verwachten. Bepaal of de oorspronkelijke volgorde behouden moet blijven voordat je een wijzigings- of kopieermethode kiest. Referenties en oppervlakkige kopieën verklaren welke latere wijzigingen lokaal blijven en welke zichtbaar blijven via een andere arraynaam.

5.1 Sorteer getallen en behoud het origineel

Sorteren kiest een volgorde door elementen te vergelijken. Omkeren draait alleen de bestaande volgorde om. Beide bewerkingen hebben methoden die een array wijzigen en methoden die een kopie maken.

Begrijp de standaardvolgorde

[10, 9, 1, 100].sort() geeft [1, 10, 100, 9]. Zonder vergelijkingsfunctie vergelijkt sort elementen als strings, teken voor teken met UTF-16-code-eenheden. “100” begint met “1”, dat vóór “9” komt. De opgeslagen elementen blijven getallen; alleen de vergelijking gebruikt hun tekstvorm.

Ook voor strings kan deze standaardvolgorde lezers verrassen. ["banana", "Cherry", "apple"].sort() geeft ["Cherry", "apple", "banana"], omdat ASCII-hoofdletters vóór kleine letters komen. Letters met een accent kunnen worden gescheiden van de letters waarmee lezers ze groeperen. Gebruik een taalafhankelijke vergelijking voor de alfabetische volgorde die mensen verwachten.

Geef een waarde met het juiste teken terug

Een vergelijkingsfunctie ontvangt twee elementen, a en b. Een negatieve retourwaarde plaatst a vóór b; een positieve retourwaarde plaatst het na b; nul behandelt ze als gelijk bij het sorteren.

const nums = [10, 9, 1, 100];
nums.sort((a, b) => a - b);
// nums is [1, 9, 10, 100]

De vergelijking van 10 met 9 levert de positieve waarde 1 op, dus komt 9 vóór 10. Gebruik (a, b) => b - a voor aflopende getalvolgorde. Geef een getal met een betekenisvol teken terug. (a, b) => a > b geeft alleen true of false terug, die 1 of 0 worden; de functie meldt nooit dat a vóór b hoort. Zo'n vergelijkingsfunctie geeft een onbetrouwbare volgorde.

Sorteren is stabiel: elementen die als gelijk worden vergeleken, behouden hun oorspronkelijke onderlinge volgorde. ["kiwi", "fig", "pear", "plum"].sort((a, b) => a.length - b.length) geeft ["fig", "kiwi", "pear", "plum"]. De drie woorden van vier letters behouden hun volgorde.

Kies mutatie of een kopie
MethodeEffect op de bronarrayTeruggegeven array
sort(compare)Sorteert binnen de bronarrayDezelfde array
toSorted(compare)Laat de bronarray ongewijzigdNieuwe gesorteerde array
reverse()Keert de volgorde binnen de bronarray omDezelfde array
toReversed()Laat de bronarray ongewijzigdNieuwe array in omgekeerde volgorde

const sorted = scores.sort((a, b) => a - b); geeft een tweede naam aan dezelfde, nu gesorteerde array. De eerdere volgorde blijft niet behouden. Gebruik voor een nieuwe gesorteerde array scores.toSorted((a, b) => a - b) of maak een kopie met spreadsyntaxis vóór sort.

[3, 1, 2].toReversed() geeft [2, 1, 3]. Dat is een omgekeerde reeks, geen aflopende getalvolgorde. Om de grootste waarden eerst te zetten, gebruik je een vergelijkingsfunctie voor aflopende volgorde of sorteer je oplopend voordat je de volgorde omkeert.

Controleer typen voordat je numerieke tekst sorteert

Waarden uit split zijn strings. ["10", "9", "100"].sort() geeft ["10", "100", "9"]. Aftrekken in een vergelijkingsfunctie converteert numerieke strings tijdens de vergelijking, maar laat de elementen als strings staan. Converteer eerst met map(Number) wanneer de waarden numerieke gegevens zijn en gebruik daarna een vergelijkingsfunctie voor getallen. Dit bereidt de gegevens ook voor op later optellen zonder onbedoelde tekstsamenvoeging.

Belangrijkste punten

  • Standaardsortering vergelijkt tekst, ook bij numerieke elementen.
  • Gebruik a - b voor oplopende en b - a voor aflopende getallen.
  • Een vergelijkingsfunctie geeft een negatief getal, nul of een positief getal terug.
  • Elementen die als gelijk worden vergeleken, behouden hun onderlinge volgorde.
  • sort en reverse wijzigen de array; toSorted en toReversed kopiëren.
  • De huidige volgorde omkeren levert niet noodzakelijk een gesorteerde volgorde op.

5.2 Orden en maak gegevens op voor de lezer

Mensen verwachten dat de volgorde van tekst en de opmaak van getallen de conventies van een taal volgen. Bewaar waarden in vormen die gemakkelijk te verwerken zijn, kies een expliciete landinstelling voor tekstvergelijking en maak de uiteindelijke uitvoer op voor de lezer.

Vergelijk tekst met regels van een landinstelling

a.localeCompare(b, locale) geeft een negatief getal terug als a vóór b komt, een positief getal als het erna komt en nul als ze als gelijk worden vergeleken. Alleen het teken is gegarandeerd, niet exact -1 of 1.

const names = ["Zoe", "Émile", "adam"];
const sorted = names.toSorted((a, b) => a.localeCompare(b, "en"));
// sorted is ["adam", "Émile", "Zoe"]

Een landinstelling is een taalcode zoals “en”, “de” of “sv”. Het Duits plaatst “ä” vóór “z”, terwijl het Zweeds die na “z” plaatst. Geef de bedoelde taal van de pagina door om die keuze expliciet te maken. Zonder landinstelling bepalen de standaardinstellingen van de uitvoeringsomgeving de volgorde.

Gewone vergelijkingen met < vergelijken nog steeds tekencodes. Woorden van elkaar aftrekken levert NaN op, wat bij het sorteren werkt als een vergelijking met gelijk resultaat; het levert geen alfabetische volgorde op.

Stel nuttige vergelijkingsopties in

Met { numeric: true } worden reeksen cijfers als getallen vergeleken. Als je ["file10", "file2", "file1"] sorteert met (a, b) => a.localeCompare(b, "en", { numeric: true }), krijg je ["file1", "file2", "file10"]. Een gewone tekstsortering plaatst “file10” vóór “file2”.

In het Engels behandelt { sensitivity: "base" } varianten in hoofdlettergebruik en accenten, zoals “a”, “A” en “á”, als gelijk. Deze regels hangen af van de taal: het Zweeds behandelt “a” en “ä” als verschillende basisletters. Gebruik de bedoelde landinstelling zowel bij vergelijken op overeenkomst als bij sorteren.

Hergebruik bij veel vergelijkingen een tekstvergelijker:

const collator = new Intl.Collator("en", { numeric: true });
const sorted = files.toSorted(collator.compare);

collator.compare is al een vergelijkingsfunctie. Door die eenmaal te maken, voorkom je dat dezelfde opties voor de landinstelling tijdens een grote sortering steeds opnieuw worden ingesteld.

Sorteer datums voordat je ze opmaakt

Strings met vaste breedte in de vorm YYYY-MM-DD plaatsen het jaar vóór de maand en de dag. Tekstsortering volgt dan de datumvolgorde: ["2026-03-15", "2025-11-02", "2026-01-20"].sort() geeft ["2025-11-02", "2026-01-20", "2026-03-15"].

Tekst met de dag eerst, zoals “15/03/2026” en “20/01/2025”, vergelijkt eerst de dag en kan daardoor het latere jaar voorop plaatsen. Sla deze datums op en sorteer ze in ISO-vorm en maak aan het einde tekst voor de weergave.

Bouw leesbare lijsten en getallen op

join(", ") gebruikt overal hetzelfde scheidingsteken. Intl.ListFormat voegt het laatste verbindingswoord van de taal toe:

const list = new Intl.ListFormat("en-US", {
  style: "long", type: "conjunction"
});
list.format(["Ana", "Ben", "Cleo"]);
// "Ana, Ben, and Cleo"

“en-GB” levert “Ana, Ben and Cleo” op; “nl” levert “Ana, Ben en Cleo” op. Een alternatief gebruikt in het Engels “or”. Twee namen geven “Ana and Ben” zonder komma.

(1234.5).toLocaleString("en-US") geeft “1,234.5”, terwijl “de-DE” “1.234,5” geeft. Deze resultaten zijn strings. Sorteer numerieke gegevens voordat je toLocaleString met map toepast; als je eerst opmaakt, vervang je numerieke waarden door tekst waarvan de interpunctie de tekstsortering beïnvloedt.

Belangrijkste punten

  • Gebruik localeCompare of een herbruikbare Intl.Collator voor taalafhankelijke volgorde.
  • Gebruik het teken van het vergelijkingsresultaat, niet exact -1 of 1.
  • numeric: true ordent cijferreeksen binnen namen op een natuurlijke manier.
  • ISO-datumstrings met vaste breedte worden als tekst chronologisch gesorteerd.
  • Intl.ListFormat voegt een passend verbindingswoord voor de taal toe.
  • Sorteer getallen eerst en maak ze als laatste op.

5.3 Kopieer arrays zonder onbedoelde wijzigingen te delen

Een arrayvariabele bevat een referentie naar een array. Als je die variabele aan een andere naam toewijst, wordt de array gedeeld. Met spreadsyntaxis kun je een nieuwe buitenste array maken, lijsten combineren of elementen als afzonderlijke functieargumenten doorgeven.

Maak onderscheid tussen toewijzen en kopiëren
const a = [1, 2, 3];
const b = a;
b.push(4);
// a and b both refer to [1, 2, 3, 4].
console.log(a === b); // true

Er is één array met twee namen. const verhindert niet dat een van beide namen wordt gebruikt om de array te wijzigen. Voor een nieuwe buitenste array is een echte kopieerbewerking nodig:

const c = [...a];
c.push(5);
// c is [1, 2, 3, 4, 5]; a stays [1, 2, 3, 4].
console.log(c === a); // false

De drie punten leggen de elementen van a uit binnen een nieuwe arrayliteral. Als je ze weglaat, heeft dat een ander effect: [a] maakt een array met één element, namelijk de volledige array a. [...a] bevat de elementen van a afzonderlijk.

Combineer en voeg in

[...[1, 2], ...[3, 4]] geeft [1, 2, 3, 4], net als [1, 2].concat([3, 4]). [...first, 99, ...second] plaatst één extra element tussen twee lijsten. [...list, "new"] maakt een verlengde array, terwijl list.push("new") de bestaande array wijzigt. Spreadsyntaxis behoudt de volgorde van de elementen van elke invoer.

Herken een oppervlakkige kopie
const grid = [[1, 2], [3, 4]];
const copy = [...grid];
copy[0].push(9);
// grid[0] and copy[0] are both [1, 2, 9].

De buitenste arrays verschillen, maar hun rijelementen verwijzen nog steeds naar dezelfde binnenste arrays. Dit is een oppervlakkige kopie. Als je copy[0] vervangt door een nieuwe rij, verandert alleen de gekopieerde buitenste array; als je de bestaande rij wijzigt, verandert de gedeelde rij. structuredClone(grid) maakt een onafhankelijke diepe kopie van deze geneste arrays.

Spreid waarden uit in een aanroep

Math.max(...[3, 9, 4]) geeft drie afzonderlijke argumenten door en geeft 9 terug. Als je de array rechtstreeks doorgeeft, geeft Math.max([3, 9, 4]) één array door en levert NaN op. Lege spreadsyntaxis geeft Math.max(...[]) === -Infinity en Math.min(...[]) === Infinity.

Zeer grote arrays kunnen de argumentenlimiet van een engine overschrijden wanneer je ze in een aanroep uitspreidt. Er is geen universeel veilig aantal elementen. Gebruik een lus of reduce om een uiterste waarde voor grote invoer te vinden. Spreadsyntaxis in een arrayliteral maakt geen lijst met functieargumenten.

Spreid strings uit en werk kopieën bij

[..."hello"] levert vijf strings met elk één letter op. Spreadsyntaxis voor strings bezoekt Unicode-codepunten: [..."a😀"] heeft twee elementen, terwijl "a😀".split("") drie UTF-16-code-eenheden heeft. Sommige zichtbare symbolen combineren meerdere codepunten, dus levert uitspreiden geen algemene telling van zichtbare tekens op. Een getal is niet itereerbaar; [...5] geeft een TypeError.

In een parameterlijst gebruikt function total(...nums) restsyntaxis om argumenten in een array te verzamelen. Spreadsyntaxis in een aanroep doet het omgekeerde: die geeft afzonderlijke argumenten door.

Voor bijwerkingen op basis van kopieën geeft [10, 20, 30].with(1, 25) de waarde [10, 25, 30] en geeft .toSpliced(1, 1) de waarde [10, 30]. Ook toSorted en toReversed behouden de bronarray. Dit zijn oppervlakkige kopieën, dus geldt dezelfde regel voor het delen van binnenste arrays.

Belangrijkste punten

  • Toewijzing deelt een array; spreadsyntaxis in een arrayliteral maakt een nieuwe buitenste array.
  • Als je spreadsyntaxis weglaat, nest je een array als één element.
  • Spreadsyntaxis kan arrays combineren en extra elementen invoegen zonder mutatie.
  • Een oppervlakkige kopie deelt nog steeds binnenste arrays; structuredClone kopieert deze geneste arrays diep.
  • Spreadsyntaxis in een aanroep geeft afzonderlijke argumenten door en is ongeschikt voor invoer van onbeperkte omvang.
  • Spreadsyntaxis voor strings bezoekt codepunten; restparameters verzamelen argumenten.
  • with en toSpliced maken gewijzigde kopieën.

Lussen en arrays in JavaScript: voorbeelden

5 Walkthroughs

1

Volg een lus van de eerste controle tot het verlaten ervan

12 stappen
Volg een teller en een lopend totaal, vergelijk lussen die vooraf en achteraf controleren en stuur daarna een geneste zoekactie.
  1. 1
    IntroductieVolg wat verandert

    Een lus herhaalt een lichaam, maar het resultaat hangt af van de volgorde van controles en veranderingen. We volgen een klein totaal één iteratie tegelijk, kiezen daarna een lus op basis van een voorwaarde (while controleert eerst, do...while na één uitvoering) en sturen een geneste zoekactie met break en continue om te stoppen of over te slaan.

    Houd twee vragen gescheiden: welke waarde bereikt het lichaam en welke waarde laat de volgende controle mislukken? De laatste mislukte controle hoort bij de uitvoeringsvolgorde, ook al wordt het lichaam daarbij niet uitgevoerd.

  2. 2
    VoorbeeldZet een lopend totaal op

    We willen het totaal van 2, 4 en 6. De teller kiest elk getal, terwijl een aparte accumulator de som bijhoudt.

    let total = 0;
    for (let n = 2; n <= 6; n += 2) {
      total += n;
    }
    

    De initialisatie stelt n eenmaal in op 2. De eerste controle, 2 <= 6, slaagt. De eerste uitvoering van het lichaam telt twee bij nul op, waardoor total op 2 komt. De bijwerking verandert n daarna in 4.

  3. 3
    VoorbeeldVolg de overige controles

    De volgende controle accepteert 4, dus wordt het totaal 2 + 4, oftewel 6. De bijwerking brengt de teller naar 6, wat nog steeds voldoet aan n <= 6. Als je die laatste waarde optelt, wordt het totaal 12.

    Daarna verandert de bijwerking n in 8. Nu is 8 <= 6 onwaar en stopt de lus. Het lichaam is drie keer uitgevoerd en de voorwaarde is vier keer gecontroleerd. Er is geen acht bij het totaal opgeteld.

  4. 4
    UitdagingVerander één eindpunt

    Wat zou het eindtotaal zijn als de lus hierboven n < 6 gebruikte in plaats van n <= 6, en waarom?

    ---reveal---

    Het totaal zou 6 zijn: alleen 2 en 4 bereiken het lichaam. Bij n = 6 is de voorwaarde al onwaar, dus wordt zes nooit opgeteld. De bijwerking bereikt nog steeds zes, maar een waarde in de luskop bereiken garandeert geen iteratie die die waarde gebruikt.

  5. 5
    UitlegLaat een resultaat bepalen wanneer de lus stopt

    Stel dat een batchgrootte begint bij 5 en verdubbelt totdat die minstens 30 bereikt. Een while-lus kan het werk dat nog nodig is rechtstreeks uitdrukken.

    let size = 5;
    let rounds = 0;
    while (size < 30) {
      size *= 2;
      rounds++;
    }
    

    De groottes worden 10, 20 en 40. De lus eindigt na drie rondes, omdat veertig de eerste bereikte grootte is waarvoor nog een verdubbeling niet nodig is.

  6. 6
    KernpuntBepaal of een eerste uitvoering nodig is

    Een while-lus controleert voordat die iets doet. Als de begingrootte al 40 is, wordt de vorige lus nul keer uitgevoerd. Een do...while-lus zou de grootte eenmaal verdubbelen voordat de lus vaststelt dat nog een uitvoering niet nodig is.

    Gebruik die controle achteraf wanneer één uitvoering onderdeel van de taak is. Bij het tellen van cijfers door telkens één cijfer te verwijderen, moet nul als een getal met één cijfer worden geteld. Daarom is een eerste uitvoering van het lichaam nuttig.

  7. 7
    UitdagingLees een lus die achteraf controleert

    Wat zijn n en runs na deze code?

    let n = 1;
    let runs = 0;
    do {
      n *= 3;
      runs++;
    } while (n < 8);
    

    ---reveal---

    n is 9 en runs is 2. De eerste uitvoering van het lichaam levert drie op en de controle slaagt. De tweede levert negen op en de controle mislukt. De controle vindt na elke vermenigvuldiging plaats, dus kan de eindwaarde de grens overschrijden.

  8. 8
    VoorbeeldSla een waarde over zonder de lus te beëindigen

    Deze lus drukt alleen de toegestane tellerwaarden af.

    for (let n = 1; n <= 5; n++) {
      if (n === 3) continue;
      console.log(n);
    }
    

    De lus drukt 1, 2, 4, 5 af. Bij drie slaat continue het afdrukken over, maar de bijwerking in de luskop gaat nog steeds naar vier. Met break zou de hele lus bij drie stoppen en zou geen latere waarde worden afgedrukt.

  9. 9
    UitdagingZoek een bijwerking die wordt overgeslagen

    Waarom maakt deze code bij n = 2 geen voortgang meer?

    let n = 0;
    while (n < 4) {
      if (n === 2) continue;
      n++;
    }
    

    ---reveal---

    Continue springt direct naar de while-voorwaarde en slaat n++ over. Bij twee is elke latere controle waar en slaat elke uitvoering van het lichaam de bijwerking opnieuw over. Verhoog de teller in die tak voordat je doorgaat, of gebruik een for-lus waarvan de luskop de bijwerking uitvoert.

  10. 10
    VoorbeeldVolg een binnenste zoekactie

    Voor elke buitenste waarde begint een binnenste lus opnieuw.

    for (let a = 1; a <= 3; a++) {
      for (let b = 1; b <= 4; b++) {
        if (a * b === 6) break;
        console.log(a, b);
      }
    }
    

    Bij a = 2 beëindigt het bereiken van b = 3 die binnenste lus voordat het paar wordt afgedrukt. De buitenste lus gaat nog wel verder naar drie. Een gewone break stuurt alleen de binnenste lus.

  11. 11
    UitdagingBeëindig de hele geneste zoekactie

    De geneste zoekactie moet volledig stoppen bij het eerste product van zes. Met welke wijziging bereik je dat en welk paar veroorzaakt de stop?

    ---reveal---

    Geef de buitenste lus het label outer: en vervang de break door break outer;. Het eerste overeenkomende paar is a = 2, b = 3: rij één heeft geen product van zes, daarna bereikt rij twee het product in de derde kolom. Beide lussen eindigen op dat punt, dus wordt rij drie nooit uitgevoerd.

  12. 12
    SamenvattingLees het uitvoeringspad

    Volg de initialisatie eenmaal en daarna elke voorwaarde, elk lichaam en elke bijwerking op volgorde. Tel alleen geslaagde toegang tot het lichaam als iteratie.

    Een while-lus kan het lichaam helemaal overslaan; een do...while-lus kan dat niet. Continue maakt een volgende iteratie mogelijk, maar kan een bijwerking in een while-lus overslaan. Break beëindigt de bijbehorende lus en een label kan die beëindiging uitbreiden naar een buitenste zoekactie. Bepaal in elk geval welke instructie de uitvoering vervolgens bereikt.

2

Volg een array en elk methoderesultaat

11 stappen
Lees geïndexeerde gegevens, volg een invoeging en verwijdering en zet daarna een doorzochte lijst om in tekst voor weergave.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieVolg twee resultaten van een wijziging
  2. 2
    VoorbeeldKoppel waarden aan indexen
  3. 3
    UitdagingLees een geneste planning
  4. 4
    VoorbeeldVoeg een taak toe en bewaar de retourwaarde
  5. 5
    VoorbeeldVervang een taak met splice
  6. 6
    UitdagingKopieer een bereik
  7. 7
    UitlegZoek expliciet naar een positie
  8. 8
    UitdagingSplits en voeg tekst samen
  9. 9
    KernpuntHoud numerieke tekst gescheiden van getallen
  10. 10
    UitdagingZoek voordat je verwijdert
  11. 11
    SamenvattingOnderscheid posities, wijzigingen en tekst
3

Maak van een lus een bruikbaar resultaat

10 stappen
Kies een manier van doorlopen, bereken een totaal en een aantal en bouw daarna veranderingen tussen opeenvolgende metingen op.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieKies wat het lichaam nodig heeft
  2. 2
    UitlegLees waarden rechtstreeks
  3. 3
    UitdagingBezoek elke tweede positie
  4. 4
    VoorbeeldBereken een totaal en tel lange ritten
  5. 5
    VoorbeeldGebruik het voltooide totaal
  6. 6
    UitdagingZoek een uiterste waarde zonder nul te verzinnen
  7. 7
    VoorbeeldBouw verschillen tussen aangrenzende waarden op
  8. 8
    UitdagingBehoud alleen toenames
  9. 9
    TipVerwijder vanaf het einde wanneer indexen verschuiven
  10. 10
    SamenvattingKies een beginwaarde voor elk resultaat
4

Volg een reeks callbackbewerkingen

15 stappen
Geef waarden terug vanuit callbacks, selecteer en transformeer metingen, doorzoek ze en volg een reductie.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieLaat de methode het bezoeken regelen
  2. 2
    UitlegGeef een expressie of een blokresultaat terug
  3. 3
    UitdagingKies een methode voor afgedrukte uitvoer
  4. 4
    VoorbeeldBehoud geselecteerde metingen
  5. 5
    VoorbeeldTransformeer de geselecteerde waarden
  6. 6
    UitdagingBehoud geldige nullen
  7. 7
    UitlegZoek één waarde of de positie ervan
  8. 8
    UitdagingHerken een overeenkomst met nul
  9. 9
    KernpuntControles op één en alle elementen zijn op verschillende momenten klaar
  10. 10
    VoorbeeldBegin een reductie expliciet
  11. 11
    TipZorg op elk pad voor een volgende accumulator
  12. 12
    UitdagingVolg een gefilterd totaal
  13. 13
    UitdagingOnderzoek een conversiecallback
  14. 14
    UitdagingKies alle overeenkomsten of één overeenkomst
  15. 15
    SamenvattingLees elke vorm van het teruggegeven resultaat
5

Behoud gegevens tijdens het ordenen en opmaken

13 stappen
Kies vergelijkingsregels, sorteer numerieke gegevens vóór het opmaken en volg het gedrag van oppervlakkige kopieën.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMaak afzonderlijke keuzes voor volgorde en identiteit
  2. 2
    VoorbeeldControleer de standaardvolgorde
  3. 3
    UitlegGebruik het teken van de vergelijkingsfunctie
  4. 4
    UitdagingBescherm de volgorde van de bronarray
  5. 5
    VoorbeeldLaat de taal de tekstvolgorde bepalen
  6. 6
    UitdagingOrden genummerde labels
  7. 7
    VerbandRond berekeningen af vóór de weergave
  8. 8
    VoorbeeldGeef dezelfde array een tweede naam
  9. 9
    VoorbeeldKopieer de buitenste lijst
  10. 10
    UitdagingZoek een gedeelde binnenste rij
  11. 11
    TipGeef argumenten door zonder een enorme aanroep te maken
  12. 12
    UitdagingCombineer ordenen, kopiëren en opmaken
  13. 13
    SamenvattingVolg wat wordt gedeeld en teruggegeven

Lussen en arrays in JavaScript: oefenvragen

40 Oefenvragen in 4 sets

Set 1: Wijzig arrays en bouw resultaten op met lussen10 Oefenvragen

Vraag 1 van 10

Wat bevat size na deze instructies?

const tags = ["new", "open"];
const size = tags.push("done");
  1. ["new", "open", "done"]
  2. 3
  3. "done"
  4. 2
Toon antwoordVerberg antwoord
Antwoord: B
push voegt “done” toe aan de bestaande array en geeft de nieuwe lengte, drie, terug. De array zelf bevat nu drie strings, maar die array is niet de retourwaarde van de aanroep. Als je die twee resultaten verwart, sla je een getal op waar latere code een lijst verwacht.

Vraag 2 van 10

Wat zijn cut en data daarna?

const data = [4, 8, 12, 16];
const cut = data.splice(1, 2, 7);
  1. cut = [8]; data = [4, 7, 12, 16]
  2. cut = [4, 7, 16]; data = [8, 12]
  3. cut = [8, 12]; data = [4, 8, 12, 16]
  4. cut = [8, 12]; data = [4, 7, 16]
Toon antwoordVerberg antwoord
Antwoord: D
Vanaf index één verwijdert splice twee elementen, acht en twaalf, en voegt zeven op die positie in. De methode geeft de verwijderde elementen terug en laat de gewijzigde bronarray achter als [4, 7, 16]. Als je alleen acht verwijdert, behandel je het tweede argument als een uitgesloten eindindex, zoals bij slice.

Vraag 3 van 10

Een zoekactie moet een waarde op index nul herkennen en een ontbrekende waarde afwijzen. Welke voorwaarde moet if (items.indexOf(target)) vervangen?
  1. if (items.indexOf(target) !== -1)
  2. if (items.indexOf(target) > 0)
  3. if (items.indexOf(target) !== 0)
  4. if (items.indexOf(target) === 1)
Toon antwoordVerberg antwoord
Antwoord: A
Een gevonden index kan nul zijn en geen overeenkomst wordt weergegeven met min één. Door expliciet met -1 te vergelijken, accepteer je elke geldige positie en wijs je een mislukte zoekactie af. Een controle met > 0 mist nog steeds een element aan het begin, precies een van de gevallen die de oplossing moet afhandelen.

Vraag 4 van 10

Welke luskop levert elke stringwaarde uit labels op volgorde?
  1. for (const label in labels)
  2. for (const label of labels.length)
  3. for (const label of labels)
  4. for (const label in labels.length)
Toon antwoordVerberg antwoord
Antwoord: C
for...of leest de itereerbare array en levert de waarden op volgorde. for...in levert eigenschapsnamen, zoals indexen als strings, en zou dus niet rechtstreeks de labels leveren. De numerieke lengte beschrijft het aantal posities en is zelf geen itereerbare lijst.

Vraag 5 van 10

Wat is de eindwaarde van count?

let count = 0;
for (const n of [11, 6, 14, 9]) {
  if (n >= 10) count++;
}
  1. 2
  2. 4
  3. 25
  4. 3
Toon antwoordVerberg antwoord
Antwoord: A
Elf en veertien voldoen aan de controle en elk telt één bij de teller op, wat twee geeft. Vijfentwintig is de som van de overeenkomende waarden, waarvoor count += n nodig zou zijn. Deze lus telt overeenkomsten in plaats van hun numerieke waarden op te tellen.

Vraag 6 van 10

Wat blijft na deze code in values over?

const values = [3, 6, 8, 9];
for (let i = 0; i < values.length; i++) {
  if (values[i] % 3 === 0) values.splice(i, 1);
}
  1. [8]
  2. [6, 8, 9]
  3. [3, 8]
  4. [6, 8]
Toon antwoordVerberg antwoord
Antwoord: D
Door drie te verwijderen schuift zes naar index nul, maar de teller gaat naar index één en ziet acht. Daarna verwijdert de lus negen op index twee, zodat [6, 8] overblijft. Het resultaat [8] gaat ervan uit dat elk veelvoud van drie wordt gecontroleerd en ziet de waarde over het hoofd die na de eerste verschuiving wordt overgeslagen.

Vraag 7 van 10

Welke waarde levert "7;12;5".split(";").join(" / ") op?
  1. [7, 12, 5]
  2. "7 / 12 / 5"
  3. "7;12;5"
  4. "7 / 12 / 5 / "
Toon antwoordVerberg antwoord
Antwoord: B
Splitsen maakt de stringelementen ["7", "12", "5"]; samenvoegen plaatst “ / ” ertussen om één string te maken. Er is geen afsluitend scheidingsteken omdat join dat alleen tussen elementen invoegt. De numerieke array zou ook conversie vereisen en zou niet het resultaat van join zijn.

Vraag 8 van 10

Welke array wordt opgebouwd?

const readings = [9, 4, 8, 3];
const rises = [];
for (let i = 1; i < readings.length; i++) {
  const change = readings[i] - readings[i - 1];
  if (change > 0) rises.push(change);
}
  1. [-5, 4, -5]
  2. [8]
  3. [4]
  4. [5, 5]
Toon antwoordVerberg antwoord
Antwoord: C
De veranderingen tussen aangrenzende waarden zijn min vijf, plus vier en min vijf. Alleen de positieve verandering wordt toegevoegd, wat [4] oplevert. [8] slaat de latere meting op in plaats van de verandering, terwijl de array met drie veranderingen de voorwaarde negeert die afnames afwijst.

Vraag 9 van 10

Wat zijn de lengte en het laatste element van a daarna?

const a = [2, 4];
a[5] = 12;
  1. Lengte 3; laatste element 12.
  2. Lengte 5; laatste element 12.
  3. Lengte 6; laatste element undefined.
  4. Lengte 6; laatste element 12.
Toon antwoordVerberg antwoord
Antwoord: D
Index vijf is de zesde positie, dus stelt een toewijzing daar de lengte in op zes en slaat twaalf aan het einde op. De posities tussen de eerdere waarden en twaalf zijn leeg. Een lengte van drie telt de toegewezen waarden, maar negeert dat de arraylengte ook de tussenliggende gaten omvat.

Vraag 10 van 10

Een maximum moet een element zijn van een niet-lege numerieke array, ook wanneer elke waarde negatief is. Waarom kan beginnen bij 0 het verkeerde resultaat opleveren?
  1. Nul dwingt elke vergelijking om onwaar terug te geven bij positieve gegevens.
  2. Nul kan groter zijn dan elk element en nooit worden vervangen.
  3. Nul laat de lus na het eerste negatieve element stoppen.
  4. Nul wordt bij elk element opgeteld voordat de vergelijking wordt uitgevoerd.
Toon antwoordVerberg antwoord
Antwoord: B
Bij een array met alleen negatieve waarden is geen element groter dan nul, zodat de accumulator een waarde kan behouden die nooit in de invoer stond. Als je met het eerste element begint, voorkom je dat verzonnen resultaat. De vergelijking zelf stopt de lus niet; de fout zit in de eerste kandidaat.
Set 2: Volg lussen en lees arrayposities10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Hoe vaak wordt dit luslichaam uitgevoerd?

for (let i = 2; i < 7; i++) {
  console.log(i);
}
  1. 4 keer
  2. 6 keer
  3. 5 keer
  4. 7 keer
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat geeft ["oak", "pine", "elm", "fir"].at(-2) terug?
  1. "elm"
  2. "pine"
  3. "fir"
  4. undefined
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welke waarde wordt afgedrukt?

let n = 8;
do {
  n -= 3;
} while (n > 6);
console.log(n);
  1. 8
  2. 2
  3. 6
  4. 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke waarde bevat total daarna?

let total = 0;
for (let n = 3; n <= 9; n += 3) {
  total += n;
}
  1. 9
  2. 18
  3. 12
  4. 15
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke getallen worden op volgorde afgedrukt?

for (let n = 2; n <= 7; n++) {
  if (n === 4) continue;
  if (n === 6) break;
  console.log(n);
}
  1. 2, 3
  2. 2, 3, 5, 6
  3. 2, 3, 5, 7
  4. 2, 3, 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Welk paar waarden leveren grid.length en grid[1][2] op?

const grid = [[6, 2, 8], [9, 5, 1]];
  1. 3 en 1
  2. 2 en 1
  3. 2 en 5
  4. 6 en 8
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Hoeveel iteraties worden uitgevoerd voordat deze lus eindigt?

let size = 3;
let rounds = 0;
while (size < 20) {
  size *= 2;
  rounds++;
}
  1. 3 iteraties
  2. 2 iteraties
  3. 4 iteraties
  4. 6 iteraties
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Hoe vaak wordt count++ uitgevoerd?

let count = 0;
for (let a = 0; a < 4; a++) {
  for (let b = a + 1; b < 4; b++) {
    if (b === 3) break;
    count++;
  }
}
  1. 2 keer
  2. 4 keer
  3. 3 keer
  4. 6 keer
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Deze omzetting moet dezelfde waarden afdrukken als een tellus die 2 overslaat. Hoe kun je die herstellen met behoud van de while-vorm?

let i = 0;
while (i < 4) {
  if (i === 2) continue;
  console.log(i);
  i++;
}
  1. Gebruik if (i === 2) { break; }.
  2. Gebruik if (i === 2) { i++; continue; }.
  3. Verplaats i++ direct vóór console.log(i).
  4. Verander de voorwaarde in i <= 4.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat geeft [9, 2, 9].lastIndexOf(9) terug?
  1. 0
  2. 3
  3. 2
  4. 9
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Transformeer, doorzoek en reduceer arrays10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat geeft [4, 7].map(n => { n + 3; }) terug?
  1. [7, 10]
  2. undefined
  3. [4, 7]
  4. [undefined, undefined]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welke array levert deze expressie op?

[5, 16, 9, 22].filter(n => n > 10).map(n => n - 2)
  1. [3, 14, 7, 20]
  2. [14, 20]
  3. [16, 22]
  4. [14]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat geeft [8, 0, 6].find(n => n < 2) terug en hoe moet je voor deze numerieke array controleren of de zoekactie is geslaagd?
  1. undefined; controleer met result === undefined.
  2. 0; controleer met Boolean(result).
  3. 0; controleer met result !== undefined.
  4. 1; controleer met result !== -1.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke waarde geeft deze reductie terug?

[6, 3, 5].reduce((total, n) => total + n, 4)
  1. 18
  2. 14
  3. 10
  4. 24
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke waarden worden afgedrukt en wat wordt aan result toegewezen?

const result = [2, 5, 8].forEach(n => {
  if (n === 5) return;
  console.log(n);
});
  1. Drukt 2 af; result is undefined.
  2. Drukt 2, 8 af; result is [2, 8].
  3. Drukt 2, 8 af; result is undefined.
  4. Drukt 2, 5, 8 af; result is undefined.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Geldige metingen omvatten nul; alleen null betekent ontbrekend. Welke expressie converteert alle geldige metingen naar meters?

const km = [0, null, 1.2, 0.4];
  1. km.filter(n => n).map(n => n * 1000)
  2. km.map(n => n * 1000).filter(n => n !== null)
  3. km.filter(n => n !== null).map(n => n * 100)
  4. km.filter(n => n !== null).map(n => n * 1000)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Wat geeft de code terug?

[64, 40, 91].reduce((count, score) => {
  if (score >= 60) return count + 1;
}, 0)
  1. NaN
  2. 2
  3. 1
  4. undefined
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een rapport moet alleen waar zijn wanneer er minstens één score bestaat en elke score minstens 70 is. Welke expressie handelt alle invoergroottes af?
  1. scores.every(s => s >= 70)
  2. scores.length > 0 && scores.every(s => s >= 70)
  3. scores.length > 0 && scores.some(s => s >= 70)
  4. scores.length > 0 || scores.every(s => s >= 70)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat levert deze expressie op?

["6", "15", "4"].map(Number)
  .filter(n => n % 2 === 0)
  .map((n, i) => n + i)
  1. [6, 5]
  2. [6, 6]
  3. [6, 4]
  4. ["60", "42"]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Voor een niet-lege numerieke lijst is de grootste waarde nodig, ook wanneer alle waarden negatief zijn. Welke reductie voldoet aan die eis?
  1. nums.reduce((best, n) => n > best ? n : best, 0)
  2. nums.reduce((best, n) => n < best ? n : best, Infinity)
  3. nums.reduce((best, n) => n > best ? n : best, -Infinity)
  4. nums.reduce((best, n) => n > best, -Infinity)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Sorteer, kopieer en combineer resultaten veilig10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat geeft [8, 30, 4].toSorted() terug?
  1. [4, 8, 30]
  2. [30, 4, 8]
  3. [8, 4, 30]
  4. [8, 30, 4]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welke arrays bevatten a en c daarna?

const a = [6, 2];
const b = a;
const c = [...a];
b.push(9);
c[0] = 1;
  1. a = [1, 2, 9]; c = [1, 2, 9]
  2. a = [6, 2]; c = [1, 2]
  3. a = [6, 2, 9]; c = [1, 2, 9]
  4. a = [6, 2, 9]; c = [1, 2]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Hoe kun je readings van groot naar klein ordenen en de oorspronkelijke reeks behouden?
  1. readings.toSorted((a, b) => b - a)
  2. readings.sort((a, b) => b - a)
  3. readings.toReversed()
  4. readings.toSorted((a, b) => a - b)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke expressie plaatst "part12", "part3" en "part1" in natuurlijke numerieke naamvolgorde zonder parts te wijzigen?
  1. parts.toSorted((a, b) => a.localeCompare(b, "en"))
  2. parts.toSorted((a, b) => a - b)
  3. parts.toSorted((a, b) => a.localeCompare(b, "en", { numeric: true }))
  4. parts.toSorted((a, b) => b.localeCompare(a, "en", { numeric: true }))
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat zijn rows[0] en copy[1] daarna?

const rows = [[5], [8]];
const copy = [...rows];
copy[0].push(6);
copy[1] = [2];
  1. rows[0] = [5]; copy[1] = [2]
  2. rows[0] = [5, 6]; copy[1] = [8, 2]
  3. rows[0] = [5, 6]; copy[1] = [2]
  4. rows[0] = [5]; copy[1] = [8, 2]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een programma maakt [1200, 25, 4] op met numbers.map(n => n.toLocaleString("de-DE")).toSorted(). Hoe moet het de waarden ordenen en opmaken om numbers te behouden en de waarden in oplopende getalvolgorde weer te geven?
  1. Numeriek toSorted, dan opmaken: ["4", "25", "1.200"].
  2. Opmaken, dan standaard toSorted: ["1.200", "25", "4"].
  3. Standaard toSorted, dan opmaken: ["1.200", "25", "4"].
  4. Numeriek sort, dan opmaken: ["4", "25", "1.200"].
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Welke array wordt teruggegeven?

["lion", "ox", "bear", "ant"]
  .toSorted((a, b) => a.length - b.length)
  .toReversed()
  1. ["lion", "bear", "ant", "ox"]
  2. ["bear", "lion", "ox", "ant"]
  3. ["ox", "ant", "lion", "bear"]
  4. ["bear", "lion", "ant", "ox"]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat bevat view daarna?

const values = [7, 2, 5];
const i = values.findIndex(n => n < 0);
values.splice(i, 1);
const view = values.toReversed();
  1. [5, 2, 7]
  2. [2, 7]
  3. [7, 2]
  4. [5, 2]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat is de lengte van joined?

const left = [4, 6];
const right = [8, 10, 12];
const joined = [...left, right];
  1. 5
  2. 2
  3. 4
  4. 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Deze datumstrings worden niet chronologisch gesorteerd: ["08/02/2027", "19/01/2026", "03/12/2026"] in de vorm dag/maand/jaar. Welke opgeslagen strings geven voor dezelfde datums een chronologische tekstvolgorde?
  1. ["2026-01-19", "2026-12-03", "2027-02-08"]
  2. ["2026-03-12", "2026-19-01", "2027-08-02"]
  3. ["03/12/2026", "08/02/2027", "19/01/2026"]
  4. ["2027-02-08", "2026-12-03", "2026-01-19"]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

71 Kernbegrippen, elk met een definitie

A

Aanwezigheidscontrole
Een aanwezigheidscontrole vraagt of een waarde in een verzameling voorkomt en geeft een booleaanse waarde in plaats van een overeenkomende positie.
drinks.includes("tea") beantwoordt of die exacte string in kleine letters in de array aanwezig is.
Accumulator
Een accumulator is een variabele of callbackwaarde die een groeiend resultaat meeneemt van het ene verwerkte element naar het volgende.
Een temperatuurtotaal behoudt bij elke stap de vorige som voordat de huidige meting wordt opgeteld.
Afronding bij drijvendekommagetallen
Afronding bij drijvendekommagetallen ontstaat wanneer een getal niet exact binair kan worden opgeslagen en beïnvloedt berekeningen en gelijkheidscontroles.
Tien keer 0.1 optellen levert 0.9999999999999999 op, zodat een exact eindpunt van een lus kan worden gemist.
Array
Een array is een geordende verzameling waarden met geïndexeerde posities, die via één referentie wordt opgeslagen en benaderd.
De array [18, 21, 19, 24] bevat vier dagelijkse temperatuurmetingen onder één variabelenaam.
Array-identiteit
Array-identiteit onderscheidt de ene array van de andere, ook wanneer beide arrays op dat moment dezelfde geordende waarden bevatten.
[1, 2] === [1, 2] is onwaar omdat de literals twee afzonderlijke arrays maken.
Arraylengte
De arraylengte is het aantal geïndexeerde posities tot het eindpunt van de array, inclusief gaten tussen elementen waaraan een waarde is toegewezen.
Als je in een kortere array een waarde toewijst aan index 4, wordt de lengte minstens vijf, ook als eerdere posities leeg zijn.

B

Beginwaarde
Een beginwaarde geeft reduce de beginwaarde van de accumulator en wordt ongewijzigd teruggegeven wanneer de invoer geen te verwerken elementen heeft.
Door 0 op te geven, geeft een lege somreductie nul terug in plaats van een TypeError.
Bijwerking
Een bijwerking verandert de toestand van de lus tussen iteraties; een for-lus voert de bijwerking in de luskop na het lichaam uit.
De bijwerking i += 5 maakt de volgende tellerwaarde vijf groter dan de vorige.
Break-instructie
Een break-instructie verlaat onmiddellijk de omsluitende lus of een opgegeven lus met label en hervat de uitvoering daarna.
Een zoekactie naar de eerste overeenkomst gebruikt break, zodat latere waarden niet worden gecontroleerd nadat een overeenkomst is opgeslagen.

C

Callback
Een callback is een functie die aan een andere functie wordt doorgegeven en door die andere functie als onderdeel van het werk wordt aangeroepen, vaak met elk arrayelement.
Map roept de callback aan met een element en gebruikt de teruggegeven waarde in de nieuwe array.
Continue-instructie
Een continue-instructie slaat de resterende code van het lichaam voor de huidige iteratie over en gaat verder met de volgende stap van de lus.
Een controle op even getallen kan continue gebruiken om het afdrukken over te slaan terwijl de teller van een for-lus nog wel wordt bijgewerkt.

D

Diepe kopie
Een diepe kopie dupliceert zowel geneste gegevens als de buitenste structuur, zodat wijzigingen in gekopieerde rijen geen invloed hebben op de oorspronkelijke rijen.
Voor een rooster van arrays met getallen maakt structuredClone onafhankelijke kopieën van de binnenste rijen.
Do...while-lus
Een do...while-lus voert het lichaam uit voordat de voorwaarde wordt gecontroleerd, zodat de eerste iteratie plaatsvindt ook als de controle daarna mislukt.
Een do...while-lus die cijfers telt, verwerkt nul eenmaal en telt het als een getal met één cijfer.
Doorlopen via indexen
Doorlopen via indexen bezoekt een array via numerieke posities en geeft controle over richting, stapgrootte en toegang tot aangrenzende elementen.
Een achterwaartse doorloop begint bij arr.length - 1 en verlaagt de index zolang die minstens nul is.

E

Element
Een element is een waarde die op een positie in een array is opgeslagen; het kan onder andere een getal, string of andere array zijn.
In ["red", "green", "blue"] is de string “green” het element dat op index 1 is opgeslagen.
Entries-methode
De entries-methode is een arraymethode die index-waardeparen levert om te doorlopen, zodat beide gegevens samen kunnen worden gelezen.
for (const [i, name] of names.entries()) kan genummerde labels afdrukken met i + 1.
Every-methode
De every-methode is een arraymethode die waar teruggeeft wanneer geen gecontroleerd element faalt; de methode stopt bij een mislukte controle en is waar voor een lege array.
Combineer een controle op een positieve lengte met every wanneer een resultaat waarbij alles voldoende is minstens één score moet bevatten.

F

Filter-methode
De filter-methode is een arraymethode die oorspronkelijke elementen teruggeeft waarvoor de controle in de callback truthy is, met behoud van hun oorspronkelijke volgorde.
Een controle t => t > 20 selecteert warme metingen zonder ze door booleaanse waarden te vervangen.
Find-methode
De find-methode is een arraymethode die het eerste element teruggeeft dat aan een controle in een callback voldoet, of undefined als er geen overeenkomst is.
Zoeken naar een getal onder één in [3, 0, 5] geeft nul terug, een geslaagde maar falsy-overeenkomst.
FindIndex-methode
De findIndex-methode is een arraymethode die de eerste positie teruggeeft waarvoor de controle in een callback slaagt, of min één als geen element voldoet.
Een gevonden positie kan worden gebruikt om iets te verwijderen nadat is gecontroleerd dat die niet de waarde -1 voor geen overeenkomst is.
For...in-lus
Een for...in-lus bezoekt opsombare eigenschapsnamen en is daardoor ongeschikt als gewone lus over arraywaarden.
Bij een array levert de lus indexnamen als strings en kan die ook toegevoegde eigenschappen bezoeken die geen elementen zijn.
For...of-lus
Een for...of-lus ontvangt elke waarde die een itereerbare waarde levert op volgorde, zonder dat een expliciete numerieke teller nodig is.
for (const fruit of fruits) leest fruitnamen rechtstreeks, zodat het lichaam elke naam kan verwerken.

G

Geneste array
Een geneste array is een array die als element binnen een andere array is opgeslagen, waardoor structuren zoals rijen met waarden mogelijk zijn.
In grid[1][0] selecteert de eerste index een rij en de tweede een waarde binnen die rij.
Geneste lus
Een geneste lus is een lus binnen een andere lus; de binnenste reeks wordt opnieuw uitgevoerd voor elke iteratie die de binnenste lus bereikt.
Een doorloop van drie rijen en vier kolommen voert het binnenste lichaam twaalf keer uit als alle posities worden bezocht.
Getalopmaak
Getalopmaak zet een getal om in tekst voor weergave met conventies zoals de decimale en groeperingstekens van de landinstelling.
Als je 1234.5 met “de-DE” opmaakt, krijg je “1.234,5”, een string om na numeriek sorteren weer te geven.
Grensfout van één positie
Een grensfout van één positie zorgt ervoor dat een grensberekening of lus één extra positie meeneemt of één bedoelde positie mist.
Met i <= arr.length lees je bij het doorlopen van een array één index voorbij het laatste element.

I

Index
Een index duidt een positie in een array aan, waarbij gewone geïndexeerde elementen worden geteld vanaf nul tot één minder dan de lengte.
Het derde element lees je met colors[2], omdat indexering vanaf nul vóór index één begint.
Initialisatie
Initialisatie stelt de begintoestand van een lus in; in een for-lus wordt die eenmaal vóór de eerste controle van de voorwaarde uitgevoerd.
In for (let i = 1; i <= 5; i++) maakt de initialisatie i met beginwaarde 1.
ISO-datumstring
Een ISO-datumstring in de vorm YYYY-MM-DD met vaste breedte plaatst jaar, maand en dag in een volgorde die als tekst chronologisch wordt gesorteerd.
De string “2025-11-02” wordt vóór “2026-01-20” gesorteerd omdat het jaar eerst wordt vergeleken.
Iteratie
Een iteratie is één uitvoering van een luslichaam, die bij een tellus plaatsvindt na een geslaagde controle van de voorwaarde.
De getallen 1 tot en met 5 afdrukken met één afdruk per uitvoering van het lichaam kost vijf iteraties.
Itereerbare waarde
Een itereerbare waarde levert een reeks waarden die bewerkingen zoals for...of en spreadsyntaxis op volgorde kunnen bezoeken.
Arrays en strings zijn itereerbaar, maar het getal 5 uitspreiden in een array geeft een TypeError.

J

Join-methode
De join-methode is een arraymethode die één string maakt door een gekozen scheidingsteken tussen de tekstvormen van de elementen te plaatsen.
["2026", "03", "15"].join("-") levert de datumstring “2026-03-15” op.

L

Landinstelling
Een landinstelling duidt taal- of regioconventies aan die worden gebruikt voor bewerkingen zoals tekstvergelijking en getalopmaak.
De landinstelling “sv” plaatst “ä” na “z”, terwijl een Duitse vergelijking die vóór “z” plaatst.
Lege arraypositie
Een lege arraypositie is een geïndexeerd gat zonder opgeslagen element; die telt mee voor de arraylengte en levert bij uitlezen undefined op.
new Array(3) maakt drie lege posities, terwijl [3] één expliciet opgeslagen element maakt.
Lijstopmaak
Lijstopmaak zet stringelementen om in leesbare tekst met scheidingstekens en verbindingswoorden die bij de landinstelling van de lezer passen.
Intl.ListFormat kan in een Amerikaans-Engelse lijst “and” vóór de laatste naam toevoegen.
LocaleCompare-methode
De localeCompare-methode is een stringmethode die de onderlinge tekstvolgorde volgens regels van een landinstelling aangeeft via het teken van het numerieke resultaat.
Een negatief resultaat van a.localeCompare(b, "en") plaatst a vóór b in die vergelijking.
Luslabel
Een luslabel geeft een lus een naam zodat een break of continue met label de uitvoering naar die omsluitende lus kan sturen.
Met break outer; bij een overeenkomst kun je beide lussen beëindigen wanneer de buitenste lus het label outer heeft.
Lusvoorwaarde
Een lusvoorwaarde is de controle die bepaalt of nog een iteratie mag worden uitgevoerd; een onware controle vooraf verhindert dat het lichaam wordt uitgevoerd.
Met i < 10 eindigt de lus bij het bereiken van i = 10 voordat het lichaam opnieuw wordt uitgevoerd.

M

Map-methode
De map-methode is een arraymethode die callbackresultaten opslaat in een nieuwe array met dezelfde lengte als de bronarray.
Afstanden transformeren met km => km * 1000 bouwt overeenkomstige metingen in meters op.
Methodeketen
Een methodeketen gebruikt de retourwaarde van één aanroep als ontvangende waarde voor de volgende aanroep, zodat je een reeks gegevensbewerkingen van links naar rechts kunt lezen.
Een keten van filter en map behoudt eerst geselecteerde getallen en transformeert daarna alleen die behouden getallen.
Mutatie
Mutatie verandert de inhoud of volgorde van een bestaande array, waardoor de wijziging zichtbaar is via elke referentie naar die array.
De aanroep scores.push(95) wijzigt scores, ook wanneer de variabele met const is gedeclareerd.

N

Neveneffect
Een neveneffect is een actie die een functie uitvoert naast het leveren van de retourwaarde, zoals afdrukken of gedeelde gegevens wijzigen.
Een forEach-callback kan een naam afdrukken, ook al geeft de methode zelf undefined terug.

O

Omkering
Een omkering draait de huidige reeks om van het laatste naar het eerste element, zonder waarden te vergelijken om een numerieke of alfabetische volgorde vast te stellen.
Het omkeren van [3, 1, 2] geeft [2, 1, 3], wat geen numeriek gesorteerde reeks is.
Oneindige lus
Een oneindige lus blijft zich herhalen zonder te eindigen omdat de uitvoering nooit een werkende uitgang bereikt.
Een teller die nooit verandert, kan while (n < 3) voor onbepaalde tijd dezelfde waarde laten afdrukken.
Oplopende volgorde
Oplopende volgorde plaatst waarden van klein naar groot volgens de gekozen vergelijking, zoals een numerieke vergelijkingsfunctie met aftrekken.
Als je [10, 9, 1] numeriek in oplopende volgorde sorteert, krijg je [1, 9, 10].
Oppervlakkige kopie
Een oppervlakkige kopie maakt een nieuwe buitenste array met dezelfde elementwaarden, inclusief referenties naar eventuele geneste arrays.
Als je iets toevoegt aan een rij van een met spreadsyntaxis gekopieerd rooster, verandert de rij die met het oorspronkelijke rooster wordt gedeeld.

P

Parameter
Een parameter is een benoemde invoer in de definitie van een functie; de positie bepaalt welk doorgegeven argument de parameter ontvangt.
In een map-callback (value, i) ontvangt de tweede parameter de index van het huidige element.
Pijlfunctie
Een pijlfunctie gebruikt de pijlsyntaxis om een functie te definiëren, vaak compact als parameters gevolgd door één teruggegeven expressie.
De callback n => n * 2 ontvangt één getal en geeft een waarde terug die twee keer zo groot is.
Predicaat
Een predicaat is een functie die als controle wordt gebruikt; het resultaat bepaalt of een element aan een voorwaarde voldoet of moet worden behouden.
Het predicaat n => n !== null behoudt geldige metingen met waarde nul en wijst metingen met null af.
Push en pop
Push en pop voegen toe aan respectievelijk verwijderen van het einde van een array; push geeft de nieuwe lengte terug en pop het verwijderde element.
Een lijst kan met push een naam aan het einde toevoegen en die laatste naam later met pop verwijderen.

R

Reduce-methode
De reduce-methode is een arraymethode die een accumulator meeneemt door callbackaanroepen en het uiteindelijke verzamelde resultaat teruggeeft.
Een somreductie die bij nul begint, telt elke temperatuur op en geeft één numeriek totaal terug.
Reductiestap
Een reductiestap gebruikt de huidige accumulator en één element om de accumulator terug te geven die de volgende callbackaanroep ontvangt.
Een telstap geeft afhankelijk van de controle count + 1 of het ongewijzigde aantal terug.
Referentie
Een referentie duidt een gedeelde array aan, zodat meerdere variabelen toegang hebben tot dezelfde inhoud zonder elk een afzonderlijke kopie te bevatten.
Na const b = a verandert de aanroep b.push(4) ook de array die via a wordt gelezen.
Restparameter
Een restparameter verzamelt de resterende doorgegeven argumenten van een functie in een array; spreadsyntaxis in een aanroep spreidt waarden in de tegenovergestelde richting uit.
In function total(...nums) verzamelt nums de afzonderlijke argumenten in één array.
Retourwaarde
Een retourwaarde is het resultaat dat een functie terugstuurt naar de aanroeper; een instructieblok als lichaam zonder return-instructie geeft undefined.
Een map-callback met { n * 2; } berekent een product, maar geeft het niet terug om op te slaan.

S

Shift en unshift
Shift en unshift verwijderen van respectievelijk voegen toe aan het begin van een array, waardoor de indexen van de overige elementen veranderen.
queue.shift() verwijdert de eerste wachtende naam en verplaatst de volgende naam naar index nul.
Slice-methode
De slice-methode is een arraymethode die een oppervlakkige kopie van een bereik teruggeeft zonder de bronarray te wijzigen, waarbij de eindindex wordt uitgesloten.
values.slice(1, 3) kopieert de waarden op index één en twee naar een nieuwe array.
Some-methode
De some-methode is een arraymethode die waar teruggeeft wanneer minstens één controle in een callback slaagt en stopt zodra die geslaagde controle is gevonden.
Een controle of er een score onder vijftig is, geeft waar terug bij de eerste onvoldoende score.
Sortering binnen de bestaande array
Een sortering binnen de bestaande array verandert de volgorde in de bestaande array en geeft diezelfde array terug in plaats van een onafhankelijke array te maken.
Na const ordered = scores.sort(...) verwijzen ordered en scores naar dezelfde array.
Splice-methode
De splice-methode is een arraymethode die elementen in de bestaande array verwijdert of invoegt en een array met de verwijderde elementen teruggeeft.
De aanroep days.splice(2, 0, "Wed") voegt een dag in op index twee zonder een bestaande dag te verwijderen.
Split-methode
De split-methode is een stringmethode die een array met tekstdelen maakt door te splitsen waar een opgegeven scheidingsteken voorkomt.
Als je “4,8,15” op een komma splitst, krijg je drie strings die nog moeten worden geconverteerd om ze numeriek op te tellen.
Spreadsyntaxis
Spreadsyntaxis spreidt de waarden van een itereerbare waarde uit in een arrayliteral of als afzonderlijke argumenten bij een functieaanroep.
De expressie [...first, ...second] plaatst de waarden van beide arrays in een nieuwe buitenste array.
Stabiele sortering
Een stabiele sortering behoudt de oorspronkelijke onderlinge volgorde van elementen die de vergelijkingsfunctie als gelijk behandelt.
Woorden van gelijke lengte behouden hun eerdere volgorde wanneer je alleen op lengte sorteert.

T

Tekstvergelijker
Een tekstvergelijker verpakt vergelijkingsregels van een landinstelling in een herbruikbare Intl.Collator-instantie met een kant-en-klare vergelijkingsfunctie.
Een tekstvergelijker met numeric: true sorteert namen met cijfers in een natuurlijke numerieke volgorde.
Teller
Een teller houdt bij hoeveel gebeurtenissen of overeenkomsten hebben plaatsgevonden, begint meestal bij nul en neemt per overeenkomst met één toe.
Een teller voor warme dagen neemt alleen toe wanneer de huidige temperatuur aan de gekozen voorwaarde voldoet.

U

Uitvoeringstabel
Een uitvoeringstabel legt veranderende waarden bij opeenvolgende uitvoeringsstappen vast, zodat het gedrag van een lus kan worden gevolgd en gecontroleerd.
Kolommen voor de huidige meting en de lopende som tonen precies welke iteratie voor het eerst een verkeerd totaal oplevert.

V

Vergelijkingsfunctie
Een vergelijkingsfunctie geeft een negatief getal, nul of een positief getal terug om de onderlinge volgorde van twee waarden tijdens het sorteren te bepalen.
De vergelijkingsfunctie (a, b) => a - b plaatst kleinere numerieke waarden vóór grotere.
Vlag
Een vlag is een booleaanse waarde die vastlegt of aan een voorwaarde is voldaan, zoals het vinden van een overeenkomst of het tegenkomen van een mislukking.
Een vlag die aangeeft of alle scores voldoende zijn, begint op waar en verandert in onwaar wanneer een onvoldoende score verschijnt.
Voortijdig stoppen
Voortijdig stoppen beëindigt een doorloop zodra het resultaat vaststaat en voorkomt latere controles die het antwoord niet kunnen veranderen.
Een zoekactie met find stopt bij de eerste overeenkomst, terwijl every bij de eerste mislukte controle stopt.

W

While-lus
Een while-lus controleert de voorwaarde vóór elke iteratie en herhaalt zolang die voorwaarde truthy is; de lus kan nul keer worden uitgevoerd.
Een groeiberekening gebruikt while (balance < 1500) om te herhalen totdat de doelwaarde is bereikt.

Z

Zoeken naar een index
Zoeken naar een index geeft een overeenkomende positie of een aanduiding voor geen overeenkomst terug; indexOf en lastIndexOf gebruiken min één als niets is gevonden.
[3, 7, 3].lastIndexOf(3) geeft 2 terug, de positie van het laatste overeenkomende element.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag