3 ting du ikke visste om forEach-løkken I JS
tror du at du vet nøyaktig hvordan forEach
sløyfen fungerer I JS?
vel, dette var mine tanker inntil nylig: «bare en vanlig for
loop hvor du enkelt kan bruke break
eller return
eller continue
«.
I Dag skal jeg vise deg 3 ting som du kanskje ikke har kjent om forEach
– sløyfen.
tror du at koden nedenfor vil skrive ut 1 2
og deretter stoppe?
array = ;array.forEach(function (element) {
console.log(element);
if (element === 2)
return;
});// Output: 1 2 3 4
Nei, det vil det ikke. hvis du kommer Fra En Java-bakgrunn, vil du sannsynligvis spørre deg selv hvordan er det mulig?
årsaken er at vi passerer en tilbakeringingsfunksjon i vår forEach
funksjon, som oppfører seg akkurat som en normal funksjon og brukes på hvert element uansett om vi return
fra en dvs.når elementet er 2 i vårt tilfelle.
fra de offisielle MDN docs:
det er ingen måte å stoppe eller bryte en
forEach()
sløyfe annet enn ved å kaste et unntak. Hvis du trenger slik oppførsel ,er metodenforEach()
feil verktøy.
la oss omskrive koden ovenfra:
const array = ;const callback = function(element) {
console.log(element);
if (element === 2)
return; // would this make a difference? no.
}for (let i = 0; i < array.length; i++) {
callback(array);
}// Output: 1 2 3 4
return
– setningen vil ikke gjøre noen forskjell, da vi bruker funksjonen til hvert element ved hver iterasjon, derfor bryr det seg ikke om du forlot en gang, dvs. når elementet er 2.
du kan ikke bryte
tror du at en forEach
sløyfe ville break
i eksemplet nedenfor?
const array = ;array.forEach(function(element) {
console.log(element);
if (element === 2)
break;
});// Output: Uncaught SyntaxError: Illegal break statement
Nei, det vil ikke engang løpe fordi break
instruksjonen ikke er teknisk i en løkke.
Løsning?
bare bruk en normal for
sløyfe. Ingen ville le av deg.
const array = ;for (let i = 0; i < array.length; i++) {
console.log(array);
if (array === 2)
break;
}// Output: 1 2
du kan ikke fortsette
forventer du at koden nedenfor hopper over utskrift 2
til konsollen og bare viser 1 3 4
?
const array = ;array.forEach(function (element) {
if (element === 2)
continue;
console.log(element);
});// Output: Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
Nei, det vil ikke engang kjøre fordi continue
– instruksjonen ikke er i en løkke, som ligner på break
– instruksjonen.
Løsning?
bare bruk en normal for
sløyfe igjen.
for (let i = 0; i < array.length; i++) {
if (array === 2)
continue;
console.log(array);
}// Output: 1 3 4
Det var det! Håper du lærte noe nytt i dag.