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


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, metodaforEach()
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 return
nu 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.