how to stop Javascript forEach? [duplicate]

how to stop Javascript forEach? [duplicate]

This question already has an answer here:

Short circuit Array.forEach like calling break

28 answers

i’m playing with nodejs and mongoose — trying to find specific comment in deep comments nesting with recursive func and foreach within. Is there a way to stop nodejs forEach? As i understand every forEach iteration is a function and and i can’t just do “break”,only “return” but this won’t stop foreach.
function recurs(comment){
//if(…) break;


Solution 1:

You can’t break from a forEach. I can think of three ways to fake it, though.

1. The Ugly Way: pass a second argument to forEach to use as context, and store a boolean in there, then use an if. This looks awful.

2. The Controversial Way: surround the whole thing in a try-catch block and throw an exception when you want to break. This looks pretty bad and may affect performance, but can be encapsulated.

3. The Fun Way: use every().

['a', 'b', 'c'].every(function(element, index) {
  // Do your thing, then:
  if (you_want_to_break) return false
  else return true

You can use some() instead, if you’d rather return true to break.

Solution 2:

Breaking out of Array#forEach is not possible. (You can inspect the source code that implements it in Firefox on the linked page, to confirm this.)

Instead you should use a normal for loop:

function recurs(comment) {
    for (var i = 0; i < comment.comments.length; ++i) {
        var subComment = comment.comments[i];
        if (...) {

(or, if you want to be a little more clever about it and comment.comments[i] is always an object:)

function recurs(comment) {
    for (var i = 0, subComment; subComment = comment.comments[i]; ++i) {
        if (...) {

Solution 3:

In some cases Array.some will probably fulfil the requirements.

Solution 4:

As others have pointed out, you can’t cancel a forEach loop, but here’s my solution:

ary.forEach(function loop(){
    if(loop.stop){ return; }

    if(condition){ loop.stop = true; }

Of course this doesn’t actually break the loop, it just prevents code execution on all the elements following the “break”

Solution 5:

I guess you want to use Array.prototype.find
Find will break itself when it finds your specific value in the array.

var inventory = [
  {name: 'apples', quantity: 2},
  {name: 'bananas', quantity: 0},
  {name: 'cherries', quantity: 5}

function findCherries(fruit) { 
  return === 'cherries';

// { name: 'cherries', quantity: 5 }

Solution 6:

forEach does not break on return, there are ugly solutions to get this work but I suggest not to use it, instead try to use Array.prototype.some or Array.prototype.every

var ar = [1,2,3,4,5];

  if(item == 3){
     return true;
  console.log("item is :"+item+" index is : "+index);