3 věcí, které jste nevěděli o forEach smyčky v JS

Tiberiu Oprea
Tiberiu Oprea

Následovat

Jun 26, 2018 · 3 min read

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, metoda forEach() 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

returnprohláš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.