37

What command I must use, to get out of the for loop, also from //code inside jump direct to //code after

//code before
for(var a in b)
    {
    switch(something)
        {
        case something:
            {
            //code inside
            break;
            }
        }
    }
//code after
5
  • Add break; right after the closing } of the switch statement. Commented Jun 12, 2013 at 18:24
  • 3
    you might consider refactoring your solution. Commented Jun 12, 2013 at 18:35
  • 1
    @Jaak Kütt Never touch my Indent style. Commented Jan 8, 2014 at 14:29
  • @BASILIO don't draw attention with "i"-s and "sue"-s :).. would you atleast concider adding extra indent to the most inner comment and break? Commented Jan 8, 2014 at 15:32
  • @Jaak Kütt Ещё раз и по русский пожалуйста. Commented Jan 8, 2014 at 15:39

9 Answers 9

43

You can use label. Have a labeled statement and break to that label. outerLoop is the label I have used here.

//code before
outerLoop:
for (var a in b) {
    switch (something) {
        case 'case1':
            //code inside
            break outerLoop;
    }
}
//code after
Sign up to request clarification or add additional context in comments.

2 Comments

It's okay to use label once, but that might end up with a spaghetti code if you use it more often. In this situations I'd first recommend to refactor the solution instead.
yay! spaghetti!
30

use another variable to flag when you need to exit:

var b = { firstName: 'Peter', lastName: 'Smith' };
var keepGoing = true;
for (var a in b) {
  switch (true) {
    case 1:
      keepGoing = false;
      break;
  }
  if (!keepGoing) break;
  console.log('switch end');
}
console.log('for end');

example

1 Comment

@downvoter: what gives? Perfectly acceptable (and although break permits a label parameter, I personally think labels went out with BASIC and just lead to spaghetti code...)
18

Unfortunately, Javascript doesn't have allow breaking through multiple levels. The easiest way to do this is to leverage the power of the return statement by creating an anonymous function:

//code before
(function () {
    for (var a in b) {
        switch (something) {
        case something:
            {
                //code inside
                return;
            }
        }
    }
}());
//code after

This works because return leaves the function and therefore implicitly leaves the loop, moving you straight to code after


As pointed out in the comments, my above answer is incorrect and it is possible to multi-level breaking, as in Chubby Boy's answer, which I have upvoted.

Whether this is wise is, from a seven-year-later perspective, somewhat questionable.

6 Comments

I feel like an anonymous function is overkill for this kind of thing. Also, depending on how elaborate the for/switch can be, I might skim over the code and see a return and not associate it with the anonymous function (making maintenance a little more confusing later). Now, granted, this is not a complex piece of code, but applying this in practice throughout could become ugly fast.
@BradChristie I'm not sure anonymous functions are so much of a big deal as to be overkill! As to the readability thing, that's what comments are for, surely... Refactoring would probably be the ideal, but this is the cleanest way to leave the loop.
Not dramatic, but i still see a difference.
Untrue. Labels can be broken to. var b = 1; mySwitchLabel: switch(b) { case 1: for (var i=0; i<4; i++) { if (i === 0) { console.log('Break from Loop.') break mySwitchLabel; } } console.log('End of Case.') break; }
@LiamMitchell Many thanks: you are, of course, correct. My answer has been edited to point to the correct one elsewhere on this page.
|
9

it depends on what you want to accomplish... one thing I commonly do is something like this:

    //code before
for(var a in b)
{
    var breakFor = false;
    switch(something)
    {
        case something:
        {
            //code inside
            breakFor = true;
            break;
        }
    }
    if (breakFor)
        break;
}
//code after

1 Comment

Jeff was the first that use a bool var to accomplish this and other user takes more upvotes using the same statement. Why?
4

You can tell which loop / switch to break.

function foo ()
{
    dance:
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                break dance;
            }
        }
    }
}

See this answer.

Comments

2

Replace your switch with a series of if statements.

for (const a of b) {
  if (something === someValue) {
    // code inside
    break; // break out of the for loop
  } else if (something === someOtherValue) {
    // etc.
  }
}

Comments

1
for(var i=0; i<b.length; i++) {
   switch (something) {
       case 'something1':
           i=b.length;
   }
}

When the iteration variable i reaches the end of the loop, it breaks. But one can force the iteration variable to reach the end of the loop.

3 Comments

It's better to include some explanation for this code, especially since there are six other answers.
This does not solve the problem because the code will run 1 more time when i=b.length. Moreover, it's very dangerous if i is set lower than b.length, that will run forever!!!. So I recommend we should use function, label or flag instead of this.
@TrungLeNguyenNhat: the for loop condition looks for b < length, not <=, so once you set i = b.length, the condition will fail. The loop will not run one more time. In fact, even if you change it to i = b.length - 1, it will still break after this loop, because the incrementor runs before the condition.
0

I always find using conditional statements one of the easiest ways to control the code flow, at least conceptually.

var done = false;
//code before for loop
for(var a in b){
    switch(switchParameter){
        case firstCase:
            //code inside
            done = true;
            break;
        }
    }
    if(done)
        break;
}
//code outside of for loop

Comments

0
    const array = [1, 2, 3, 4, 5];

outerLoop: for (let i = 0; i < array.length; i++) {
  switch (array[i]) {
    case 1:
      console.log('Case 1');
      break; // This breaks out of the switch statement
    case 2:
      console.log('Case 2');
      break; // This breaks out of the switch statement
    case 3:
      console.log('Case 3');
      break outerLoop; // This breaks out of both the switch and the for loop
    default:
      console.log('Default case');
  }
}

console.log('Loop exited');

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.