3 dolog, amit nem tudtál a forEach hurokról a JS-ben
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, aforEach()
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.