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
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.