3 lucruri pe care nu le știai despre bucla forEach din JS

Tiberiu Oprea
Tiberiu Oprea

urmareste

Iunie 26 · 2018 * 3 min citit

crezi că știi exact cum funcționează bucla forEach în JS?

Ei bine, acestea au fost gândurile mele până de curând: „doar o buclă obișnuită for unde puteți folosi cu ușurință break sau return sau continue„.

astăzi, vă voi arăta 3 lucruri pe care s-ar putea să nu le fi știut despre bucla forEach.

credeți că codul de mai jos ar imprima 1 2 și apoi se va opri?

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

nu, nu va fi. dacă veniți dintr-un fundal Java, probabil că vă întrebați cum este posibil acest lucru?

motivul este că trecem o funcție de apel invers în funcția noastră forEach, care se comportă la fel ca o funcție normală și se aplică fiecărui element, indiferent dacă return de la unul, adică atunci când elementul este 2 în cazul nostru.

din documentele oficiale MDN:

nu există nicio modalitate de a opri sau rupe o buclă forEach() decât prin aruncarea unei excepții. Dacă aveți nevoie de un astfel de comportament, metoda forEach() este instrumentul greșit.

să rescriem codul de sus:

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

declarația returnnu va face nicio diferență, deoarece aplicăm funcția fiecărui element la fiecare iterație, prin urmare nu-i pasă dacă ați ieșit o dată, adică când elementul este 2.

nu puteți ‘rupe’

credeți că o buclăforEach ar break în exemplul de mai jos?

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

nu, nici măcar nu va rula, deoarece instrucțiunea break nu este tehnic într-o buclă.

soluție?

folosiți doar o buclă normală for. Nimeni nu ar râde de tine.

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

nu puteți ‘continua’

vă așteptați ca codul de mai jos să omită imprimarea 2 pe consolă și să afișeze doar 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

nu, nici măcar nu va rula, deoarece instrucțiunea continue nu este într-o buclă, similară instrucțiunii break.

soluție?

folosiți din nou o buclă normală for.

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

asta a fost! Sper că ai învățat ceva nou astăzi.