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.