Для 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;
};