3 dolog, amit nem tudtál a forEach hurokról a JS-ben

Tiberiu Oprea
Tiberiu Oprea

követés

Jun 26, 2018 * 3 perc olvasás

gondolod, hogy pontosan tudod, hogyan működik a forEach hurok JS – ben?

Nos, ezek voltak a gondolataim egészen a közelmúltig:”csak egy szokásosfor hurok, ahol könnyen használhatja a break vagy return vagy continue“.

ma 3 dolgot mutatok meg neked, amelyeket esetleg nem tudtál a forEach hurokról.

gondolod, hogy az alábbi kód kiírja a 1 2 – et, majd leáll?

array = ;array.forEach(function (element) {
console.log(element);
if (element === 2)
return;
});// Output: 1 2 3 4

nem, nem fog. ha Java háttérrel jössz, valószínűleg megkérdeznéd magadtól, hogyan lehetséges ez?

ennek az az oka, hogy a forEach függvényünkben egy visszahívási függvényt adunk át, amely ugyanúgy viselkedik, mint egy normál függvény, és minden elemre vonatkozik, függetlenül attól, hogy return – tól, azaz amikor az elem 2 a mi esetünkben.

a hivatalos MDN dokumentumokból:

nincs mód a forEach() hurok megállítására vagy megszakítására, kivéve egy kivétel dobását. Ha ilyen viselkedésre van szüksége, a forEach() módszer nem megfelelő eszköz.

írjuk át a kódot felülről:

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

a return utasítás nem fog különbséget tenni, mivel a függvényt minden egyes elemre alkalmazzuk minden iterációnál, ezért nem érdekli, hogy egyszer kilépett-e, azaz amikor az elem 2.

nem lehet ‘megtörni’

gondolod, hogy egyforEach hurok break lenne az alábbi példában?

const array = ;array.forEach(function(element) {
console.log(element);
if (element === 2)
break;
});// Output: Uncaught SyntaxError: Illegal break statement

nem, nem is fog futni, mert a break utasítás technikailag nincs hurokban.

megoldás?

csak használjon normál for hurkot. Senki sem nevetne rajtad.

const array = ;for (let i = 0; i < array.length; i++) {
console.log(array);
if (array === 2)
break;
}// Output: 1 2

nem lehet ‘continue’

azt várja, hogy az alábbi kód kihagyja a 2 nyomtatást a konzolra, és csak a 1 3 4 jelenik meg ?

const array = ;array.forEach(function (element) {
if (element === 2)
continue;
console.log(element);
});// Output: Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement

nem, nem is fog futni, mert a continue utasítás nem hurokban van, hasonlóan a break utasításhoz.

megoldás?

csak használjon újra egy normál for hurkot.

for (let i = 0; i < array.length; i++) {
if (array === 2)
continue;
console.log(array);
}// Output: 1 3 4

ez volt az! Remélem, ma tanultál valami újat.