In JavaScript,Ā forEach()
Ā is aĀ FUNCTIONĀ that loops over an array of elements. It takes a callback as a parameter and applies it to every element in the array.
I know that you landed on this page to know the direct way to break fromĀ forEach()
, but Iām sorry to tell you thatĀ you canāt. AsĀ MDN:
There is no way to stop or break aĀ
forEach()
Ā loop other than by throwing an exception. If you need such behavior, theĀforEach()
Ā method is the wrong tool.
Having said that, you shouldnāt useĀ forEach()
Ā if you know previously that you might need to break from the loop. Instead, you should useĀ for...of
,Ā thatās the perfect solution.
However, for just the sake of learning, letās introduce some workarounds.
First of all, letās consider the following example as a basis:
const arr = [1, 2, 3, 4],
doubled = [];
arr.forEach(num => {
doubled.push(num * 2);
});
console.log(doubled); // [ 2, 4, 6, 8 ]
Consider the case, you want to break if the element wasĀ 3
.
Using Forā¦Of Instead
As I said, thatās the recommended solution as you can break from the loop easily using theĀ break
Ā keyword.
const arr = [1, 2, 3, 4],
doubled = [];
for (const num of arr) {
if (num === 3) break;
doubled.push(num * 2);
}
console.log(doubled); // [ 2, 4 ]
Using Every() Or Some() Instead
In JavaScript,Ā every()
Ā andĀ some()
Ā are two functions likeĀ forEach()
, the difference is that:
every()
: Returns true ifĀ everyĀ callback returns true.some()
: Returns true if one callbackĀ at leastĀ returns true.
Fortunately, we can use these facts to break the loop as follows:
every()
: You should returnĀfalse
Ā at the element you want to break out.some()
: You should returnĀtrue
Ā at the element you want to break out.
Firstly, letās useĀ every()
:
const arr = [1, 2, 3, 4],
doubled = [];
arr.every(num => {
if (num === 3) return false;
doubled.push(num * 2);
return true;
})
console.log(doubled); // [ 2, 4 ]
Secondly, letās useĀ some()
:
const arr = [1, 2, 3, 4],
doubled = [];
arr.some(num => {
if (num === 3) return true;
doubled.push(num * 2);
return false;
})
console.log(doubled); // [ 2, 4 ]
Using A Variable Helper
In this workaround, you retain using theĀ forEach()
Ā function. In addition, you use a variable that controls the flow.
const arr = [1, 2, 3, 4],
doubled = [];
let shouldBreak = false; // Variable helper
arr.forEach(num => {
if (num === 3) shouldBreak = true;
if (shouldBreak === false) doubled.push(num * 2);
})
console.log(doubled); // [ 2, 4 ]
Conclusion
In this article, we knew that there is no direct way to break from theĀ forEach()
Ā function.
Then, we knew that it is preferable to useĀ for...of
Ā instead to loop over an array of elements.
Finally, we introduced some workarounds that you can use to break from the forEach()
Ā function, like using other functions likeĀ every()
Ā orĀ some()
, or by using a variable helper that controls the flow.
Also published here.
If you found this article useful, check out this article as well:
Thanks a lot for staying with me up till this point. I hope you enjoy reading this article.