Для else цикл в Javascript?

Есть ли эквивалент Javascript для цикла python for-else, поэтому примерно так:

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

Ответ 1

Рабочий пример (вам нужно использовать флаг):

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

Ответ 2

Да, это можно сделать без переменной флага. Вы можете эмулировать 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 является приемлемым, хотя и может использоваться в вспомогательной функции, если вам нужно продолжить выполнение после цикла.

Ответ 3

Нет встроенного эквивалента 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 вне функции.

Рабочий пример того, что вы хотели сделать:

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

Ответ 4

Вам нужно будет использовать логическое значение. Там нет for-else в JavaScript.

Хорошим и коротким способом поиска будет использование 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

В этих случаях вы можете выполнить прямую проверку для значения

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

Ответ 6

Вы можете использовать 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;
};