3 ting du ikke visste om forEach-løkken I JS

Tiberiu Oprea
Tiberiu Oprea

Følg

Jun 26, 2018 * 3 min lese

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 metoden forEach() 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.