【问题标题】:Loops through Array executes "else" even when "if" statement is true (Javascript)即使“if”语句为真(Javascript),通过数组循环也会执行“else”
【发布时间】:2015-05-24 08:52:24
【问题描述】:

简单的问题..不知道为什么会这样......

问题:即使 if 语句为真,“else”也会运行..

在这种情况下...


输入的城市是 "Los Angelos",它是 var "theAnswers" 的一个数组元素 意味着警报应该运行并且程序应该完成......

反而会发生什么..


程序显示 else 警报.. 然后显示正确的警报 (if)。 自己看...

var theAnswers = ["New York City", "Chicago", "Los Angelos", "Cleveland", "Ohio", "Seattle", "Boston", "Miami", "Philadelphia"];

var userAnswer = prompt("I am thinking of a Major City.. guess which one it is?", "Los Angelos");
userAnswer = userAnswer.toLowerCase();

for (var i = 0; i < theAnswers.length; i++) {
    if (userAnswer === theAnswers[i].toLowerCase()) {
        alert("Good, your guess is correct. You get one point!");
        break;
    }

    else{
        alert("Hmm... not quite the City I was looking for... Better luck next time!");

    }
}

【问题讨论】:

  • 你能用同样的方法制作小提琴吗
  • 可以在数组indexoff中使用
  • @exexzian 当然可以.. 请原谅我没有早点这样做。我以为你可以直接从 SO 运行它。 jsfiddle.net/6rctjxot/#&togetherjs=cBb3GxLTAP

标签: javascript arrays loops if-statement


【解决方案1】:

那是因为您在else 中显示了您进行的每项检查的消息。它将显示每个不匹配的城市的消息。先浏览所有城市,然后显示一次结果:

var found = false;
for (var i = 0; i < theAnswers.length; i++) {
    if (userAnswer === theAnswers[i].toLowerCase()) {
        found = true;
        break;
    }
}
if (found) {
    alert("Good, your guess is correct. You get one point!");
}else{
    alert("Hmm... not quite the City I was looking for... Better luck next time!");
}

【讨论】:

  • 谢谢!这运作良好。当我尝试使用布尔值时,我遇到的问题是不正确地嵌套它。
【解决方案2】:

删除 for 循环。您不必遍历数组即可知道其中是否存在答案,只需知道它的位置就足够了。试试这个:

var theAnswers = ["New York City", "Chicago", "Los Angelos", "Cleveland", "Ohio", "Seattle", "Boston", "Miami", "Philadelphia"];
var userAnswer = prompt("I am thinking of a Major City.. guess which one it is?", "Los Angelos");

if (theAnswers.indexOf(userAnswer)>=0) {
    alert("Good, your guess is correct. You get one point!");
}else{
    alert("Hmm... not quite the City I was looking for... Better luck next time!");
}

Fiddle

【讨论】:

  • indexOf 将为New York City 返回0。您需要使用&gt;=0 进行测试。原始代码还会检查小写版本。
  • 谢谢你!我想知道如何在不循环的情况下搜索所有元素……就是这样。
【解决方案3】:

当条件为真时,它实际上并没有执行“else”。

if (userAnswer === theAnswers[i].toLowerCase())

第一次评估此条件时,i 为 0,因此 theAnswers[i] 为“纽约市”。

【讨论】:

    最近更新 更多