对于Javascript中的else循环?

时间:2014-02-03 10:48:15

标签: javascript

是否存在类似于python'for-else'循环的Javascript,所以像这样:

searched = input("Input: ");
for i in range(5):
    if i==searched:
        print("Search key found: ",i)
        break
else:
    print("Search key not found")

或者我只需要求助于一个标志变量,所以像这样:

var search = function(num){
    found = false;
    for(var i in [0,1,2,3,4]){
        if(i===num){
            console.log("Match found: "+ i);
            found = true;
        }
    }
    if(!found){
        console.log("No match found!");
    }
};

8 个答案:

答案 0 :(得分:9)

工作示例(您需要使用标志):

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!");
    }
};

答案 1 :(得分:5)

是的,可以在没有标志变量的情况下执行此操作。您可以使用for … else statements和阻止模拟label

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
}

那就是说,我建议不要这样做。这是一种非常不通风的写作方式,会导致理解不清或混乱。早期的return是可以接受的,如果你需要在循环后继续执行,可以在辅助函数中使用。

答案 2 :(得分:1)

没有内置的JavaScript等效项。

您可以使用return作为控制流来模拟此操作。您可以将for循环放在IIFE中,然后使用返回超出条件。这确实意味着var不会使用变量污染上述范围。

(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>
//}
})();

这具有不使用标志的优点。但是,它现在位于另一个函数中,因此您无法声明要在外部使用的变量。您仍然可以在上面的范围内获取和设置变量,因此您只需要在函数外部使用var语句。

您想要做的工作示例:

&#13;
&#13;
(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: "));
&#13;
&#13;
&#13;

如果您经常这样做,您可以创建一个功能来为您完成大部分工作。

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!"));

答案 3 :(得分:1)

您可以使用 Array.some() 和测试回调:

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

Array.some() 如果任何元素(或测试)为真,则返回真,否则为假。您可以利用:

  • 在返回真值之前,您的 testCondition(item) 可以做任何您想做的事情。
  • Array.some() 将在第一次真实迭代时停止迭代。

这是一个例子:

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

所以 Array.some() 将遍历元素,如果有任何返回 true,则循环中断(它不会遍历其余元素)。最后,Array.some() 返回的值将作为一个标志:如果为 false,则运行 else 语句。

所以 for else 逻辑变成了 if not some

答案 4 :(得分:0)

你必须使用布尔值。 JavaScript中没有for-else

一种简短的搜索方式是使用Array.prototype.indexOf()

var search = function(num, arr){
    var index = arr.indexOf(num);
    if(index !== -1)
        return "Match found: " + index;
    }
    return "No match found!";
};

这样称呼它,例如:

console.log(search(4, [0,1,2,3,4]));

答案 5 :(得分:0)

在这些情况下,您可以直接检查值

if (!(searched in range(5))) { 
    console.log("No match found!"); 
}else{
    console.log(searched + " was found!");
}

答案 6 :(得分:0)

如果您的最终目标是检查给定输入是否在数组中,则可以简单地使用indexOf函数。

var arr = [1,2,3,4,5]
var lookingFor = 5 ; 

if ( arr.indexOf(lookingFor) > -1 ) {
  console.log("Input is here") ;
} else {
  console.log("Nope");
}

https://jsfiddle.net/7wnasv5e/

答案 7 :(得分:-1)

您可以使用boolean,也可以只使用return。沿着这条线的一些事情应该有用......

    var search = function(num){
    found = false;
    for(var i in [0,1,2,3,4]){
        if(i===num){
            console.log("Match found: "+ i);
            return true;
        }
    }
    return false;
};