3 věcí, které jste nevěděli o forEach smyčky v JS
myslíte si, že víte, jak přesně forEach
smyčka pracuje v JS?
No, to byly mé myšlenky až donedávna: „jen pravidelná smyčkafor
, kde můžete snadno použít break
nebo return
nebo continue
„.
dnes vám ukážu 3 věci, které jste možná nevěděli o smyčce forEach
.
myslíte si, že níže uvedený kód vytiskne 1 2
a pak se zastaví?
array = ;array.forEach(function (element) {
console.log(element);
if (element === 2)
return;
});// Output: 1 2 3 4
Ne, to nebude. Pokud pocházíte z Java pozadí, by pravděpodobně ptát sami sebe, jak je to možné?
důvodem je, že jsme procházející funkci zpětného volání v naší forEach
funkce, která se chová stejně jako normální funkce, a je aplikován na každý prvek bez ohledu na to, jestli jsme return
z tj. když jeden prvek je 2 v našem případě.
z oficiálních dokumentů MDN:
neexistuje žádný způsob, jak zastavit nebo přerušit smyčku
forEach()
, než tím, že hodí výjimku. Pokud takové chování potřebujete, metodaforEach()
je nesprávným nástrojem.
Pojďme přepsat kód z výše:
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
prohlášení nic nezmění, můžeme použít funkci pro každý prvek v každé iteraci, proto je jedno, jestli jsi vystoupil jednou, tj. když prvek je 2.
nemůžete ‚zlomit‘
myslíte si, že smyčkaforEach
by break
v příkladu níže?
const array = ;array.forEach(function(element) {
console.log(element);
if (element === 2)
break;
});// Output: Uncaught SyntaxError: Illegal break statement
ne, ani se nespustí, protože instrukce break
není technicky ve smyčce.
řešení?
stačí použít normální smyčku for
. Nikdo by se ti nesmál.
const array = ;for (let i = 0; i < array.length; i++) {
console.log(array);
if (array === 2)
break;
}// Output: 1 2
nemůžete ‚pokračovat‘
očekáváte, že níže uvedený kód přeskočí tisk 2
na konzoli a zobrazí pouze 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
ne, ani se nespustí, protože instrukce continue
není ve smyčce, podobně jako instrukce break
.
řešení?
stačí znovu použít normální smyčku for
.
for (let i = 0; i < array.length; i++) {
if (array === 2)
continue;
console.log(array);
}// Output: 1 3 4
to bylo ono! Doufám, že jste se dnes naučili něco nového.