How to break out of the forEach

Array.prototype.forEach

forEach is such an useful method.
But…how can I break the forEach loop?

Well… you can't break forEach.

Example:

1
2
3
4
5
6
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];

ary.forEach(function(value, index, _ary) {
    console.log(index + ": " + value);
    return false;
});

Fiddle
The result should look like

1
2
3
4
0: JavaScript
1: Java
2: CoffeeScript
3: TypeScript

It's still iterating through all items in the array.

Well, dang, it sucks. What should I do if I want to stop the loop based on the condition?
It's simple.

Don't use “forEach”. Use “some” or “every”.


Array.prototype.some

some is pretty much the same as forEach but it break when the callback returns true.

Example:

1
2
3
4
5
6
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];

ary.some(function (value, index, _ary) {
    console.log(index + ": " + value);
    return value === "CoffeeScript";
});

Fiddle
The result should look like

1
2
3
0: JavaScript
1: Java
2: CoffeeScript

Oh? What happened to TypeScript? Since the third iteration returned true, we successfully stopped the loop!


Array.prototype.every

every is almost identical to some except it's expecting false to break the loop.

Example:

1
2
3
4
5
6
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];

ary.every(function(value, index, _ary) {
    console.log(index + ": " + value);
    return value.indexOf("Script") > -1;
});

Fiddle
The result should look like

1
2
0: JavaScript
1: Java

Since “Java” doesn't really contain “Script” in it so the callback for the iteration returned “false”. It broke the loop.

Now you can break loops whenever you want! Enjoy.