Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

For else loop in Javascript?

Tags:

javascript

People also ask

Is there for Else loop in JavaScript?

There's no for-else in JavaScript.

What is a for Else loop?

for loops also have an else clause which most of us are unfamiliar with. The else clause executes after the loop completes normally. This means that the loop did not encounter a break statement. They are really useful once you understand where to use them.

What is if else statement in JavaScript?

The if/else statement executes a block of code if a specified condition is true. If the condition is false, another block of code can be executed. The if/else statement is a part of JavaScript's "Conditional" Statements, which are used to perform different actions based on different conditions.

What is a for loop in JavaScript?

A JavaScript for loop executes a block of code as long as a specified condition is true. JavaScript for loops take three arguments: initialization, condition, and increment. The condition expression is evaluated on every loop. A loop continues to run if the expression returns true.


Yes, it is possible to do this without a flag variable. You can emulate for … else statements using a label and a block:

function search(num) {
    find: {
        for (var i of [0,1,2,3,4]) {
            if (i===num) {
               console.log("Match found: "+ i);
               break find;
            }
        } // else part after the loop:
        console.log("No match found!");
    }
    // after loop and else
}

That said, I would recommend against doing this. It is a very unconvential way of writing this and will lead to poor understanding or confusion. An early return is acceptable though, and can be used in a helper function if you need to continue with execution after the loop.


Working example (you need to use the flag):

var search = function(num){
    var found = false;
    for(var i=0; i<5; i++){
        if(i===num){
            console.log("Match found: "+ i);
            found = true;
            break;
        }
    }
    if(!found){
        console.log("No match found!");
    }
};

There is no built-in JavaScript equivalant.

You can emulate this by using return as a control flow. You can put your for loop in an IIFE and use the return to move beyond conditions afterwards. This does mean that vars don't pollute the scope above with variables.

(function() {  // Or `(() => {` in ES6  // Python equivalent:
  for (/* for loop body*/) {            // for <loop body>:
    if (/* Condition */) {              //     if <Condition>:
      // Met condition                  //         <Met condition>
      return;  // Goes past the else    //         break
    }                                   // 
  }//else {                             // else:
    // Never met the condition          //     <Never met condition>
//}
})();

This has the advantage of not using a flag. It is now inside another function, however, so you cannot declare variables to be used outside. You can still get and set variables in the scope above, so you just have to have the var statements outside of the function.

A working example for what you wanted to do:

(function(arr, value) {
  for (var i = 0, length = arr.length; i < length; i++) {
    if (arr[i] === value) {
      console.log("Match found: " + arr[i]);
      return;
    }
  }//else {
    console.log("No match found!");
//}
})([0, 1, 2, 3, 4], +prompt("Input: "));

If you are doing this often, you can create a function to do most of it for you.

function search(arr, condition, forBody, elseBody) {
  for (var i = 0, length = arr.length; i < length; i++) {
    if (condition(arr[i], arr)) {  // if
      return forBody(arr[i], arr);  // then
    }
  }
  return elseBody(arr);  // else
}

var value = +prompt("Input: ");
search([0, 1, 2, 3, 4],
  i => /* if */ i === value,
  i => /* then */ console.log("Match found: " + i),
  () => /* else */ console.log("No match found!"));

You could use Array.some(), with a testing callback:

if(!items.some( item => testCondition(item) )){
    // else statement
}

Array.some() returns true if any of the elements (or tests) is true, false othewise. You can take advantage of:

  • before returning a truthy value, your testCondition(item) can do whatever you want.
  • Array.some() will stop iterating at the first truthful iteration.

Here's an example:

const findBigItem = (items) => {
    if(!
        // for item in items:
        items.some( item => {
            // here the code for your iteration

            // check for the break condition
            if ( item > 15) {
                console.log("I broke something here: ",item);
                return true; // instead of break
            }
            // by default return null (which is falsy)
        })
    ) { // if no item returned true
        // here goes the else statement
        console.log("I found nothing!");
    }
};

findBigItem([0,1,2,3,4]); //I found nothing!
findBigItem([0,10,20,30,40]); //I broke something here: 20

So Array.some() will iterate over the elements and if any returns true, the loop breaks (it won't go through the rest of the elements). At the end, the value returned by Array.some() will act as a flag: if false you run your else statement.

So the for else logic becomes if not some.