在下面的代码片段中,如果块只有在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]);
}
这个代码是正确的。