For else loop in Javascript?

后端 未结 7 1323
我寻月下人不归
我寻月下人不归 2021-02-03 20:47

Is there a Javascript equivalent of the python \'for-else\' loop, so something like this:

searched = input(\"Input: \");
for i in range(5):
    if i==searched:
          


        
7条回答
  •  谎友^
    谎友^ (楼主)
    2021-02-03 21:16

    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 :
        if (/* Condition */) {              //     if :
          // Met condition                  //         
          return;  // Goes past the else    //         break
        }                                   // 
      }//else {                             // else:
        // Never met the 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!"));
    

提交回复
热议问题