2015-05-24 2 views
0

Простой вопрос .. Не знаю, почему это происходит ...перебирает массив выполняет «еще», даже если «если» утверждение верно (Javascript)

Вопрос: «еще» работает даже тогда, когда если утверждение верно ..

В этом случае ...


Город вошел в «Лос-Ангелос», который является элементом массива вар «theAnswers» Значение й е оповещения должна работать и программа должна закончить ...

Что происходит вместо этого ..


Программа отображает предупреждение еще .. затем отображает соответствующее предупреждение (если). Смотрите сами ...

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!"); 

    } 
} 
+0

вы можете создать скрипку для того же – exexzian

+0

вы можете использовать в массиве indexoff – Afsar

+0

@exexzian уверен, может .. простите за не делать этого раньше. Я думал, вы можете запустить его прямо из SO. https://jsfiddle.net/6rctjxot/#&togetherjs=cBb3GxLTAP – Mike

ответ

2

Это потому, что вы показываете сообщение в 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!"); 
} 
+0

Спасибо! Это сработало хорошо. Проблема, с которой я столкнулся с булевым, неправильно вложила ее, когда я попытался ее использовать. – Mike

1

Удалите цикл. Вам не нужно проходить через массив, чтобы знать, существует ли в нем ответ, просто знайте, что его будет достаточно. Попробуйте это:

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!"); 
} 

+0

'indexOf' вернет' 0' для 'Нью-Йорка'. Вы должны использовать '> = 0' для теста. Также исходный код проверяет версию в нижнем регистре. – 6502

+0

@ 6502, спасибо за улучшение. – Afsar

+0

Спасибо за этот! Я задавался вопросом, как я мог бы искать все элементы без циклов ... вот и все. – Mike

0

Это на самом деле не выполнить команду «еще», когда условие истинно.

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

Первый раз это условие оценивается, я = 0, так theAnswers [I] является "Нью-Йорк".