如何在for循环中只执行else块一次



在下面的代码片段中,如果块只有在myCity==引用时才会显示成功警报,则中断循环执行。但在执行if块之前,其他块将执行每个索引(例如:cites[0]、cites[1]、cites[2])并显示Failed警报,直到if块成功为止。

但我想在整个执行过程中只显示一次失败警报消息,有人能帮我吗?

var cites = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ];
var myCity = "Mumbai";
for (i = 0; i < cites.length; i++) {
if (myCity == cites[i]) {
alert("Success:" + cites[i]);
break;
} else {
alert("Failed:" + cites[i]);
}
}

我知道即使有成功的项目,您也希望显示failed。因此,在另一个阵列中存储失败,然后稍后显示:

var cites = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ];
var failed = [];
var myCity = "Mumbai";
for (var i = 0; i < cites.length; i++) {
if (myCity == cites[i]) {
alert("Success: " + cites[i]);
} else {
failed.push(cites[i]);
}
}
if (failed.length > 0)
	alert("Failed: " + failed);

您可以使用some(请参阅https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/some):

var cities = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ];
var myCity = "Mumbai";
if (cities.some(function(city){
return city == myCity
})) {
alert("Success " + myCity);
} else {
alert("Failed:" + myCity);
}

如果找到结果,可以使用额外的变量进行存储。

var cites = ["Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore"];
var myCity = "Mumbai";
var found = false;
for (i = 0; i < cites.length; i++) {
if (myCity == cites[i]) {
alert("Success:" + cites[i]);
found = true;
break;
}
}
if (!found) {
alert("Failed");
}

var cites = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ],
myCity = "Mumbai",
success = false;
for (i = 0; i < cites.length; i++) {
if (myCity == cites[i]) {
alert("Success:" + cites[i]);
success = true;
break;
}
}
if (!success) {
alert("Failed:" + cites[i]);
}

这个代码是正确的。

最新更新