是否存在类似于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!");
}
};
答案 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
语句。
您想要做的工作示例:
(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;
如果您经常这样做,您可以创建一个功能来为您完成大部分工作。
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() 如果任何元素(或测试)为真,则返回真,否则为假。您可以利用:
这是一个例子:
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");
}
答案 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;
};