как сделать этот цикл только напишите второй, если один раз, когда все совпадения не найдены - PullRequest
0 голосов
/ 17 июня 2019

У меня есть массив из 5 самых чистых городов (имен) в моей стране. Затем появляется подсказка, где пользователь вводит свой город, и если город находится в массиве, на консоли выводится «wooray».

Если город не найден, вместо него печатается «ваш город воняет».

Поскольку названия городов находятся в массиве, я сделал цикл for, чтобы просмотреть все имена, сравнивая их, чтобы найти совпадение.

Это работает, но одна проблема в том, что даже когда пользователь вводит город, который присутствует в массиве, если этот город, скажем, 3-й элемент в массиве, все следующее печатается по порядку:

Твой город воняет
Твой город воняет
Wooray

Только тогда цикл разорвется. Мне нужно только посылать «ура» без «вонючек» и отправлять «вонючки» только тогда, когда в конце массива будет подтверждено, что города нет.

Мой сценарий выглядит следующим образом:

var cityToCheck = prompt("your humble city?");
var cleanestCities = [ "Bulawayo", "gweru", "Gwanda", "falls", "plumtree" ];
var found = "no";
for (var i = 0; i < 5; i++) {
    if (cityToCheck == cleanestCities[i]) {
        found = "yes";
        console.log("wooray");
        break;
    };
    if(found = "no") {
        console.log("your city stinks");
    }
}

Ответы [ 5 ]

0 голосов
/ 17 июня 2019

Короткие и сладкие

var cityToCheck = prompt("your humble city?");
var cleanestCities = ["Bulawayo", "gweru", "Gwanda", "falls", "plumtree"];
if(cleanestCities.indexOf(cityToCheck) > -1) {
    console.log("wooray");
} else {
    console.log("your city stinks");
}
0 голосов
/ 17 июня 2019

взять "if (found ...)" вне цикла for.

var cleanestCities = [ "Bulawayo", "gweru", "Gwanda", "falls", "plumtree" ];
var cityToCheck = prompt("your humble city?");
var found = false;
for (var i = 0; i < cleanestCities.length; i++) {
    if (cityToCheck == cleanestCities[i]) {
        found = true;
        break;
    };
}

if(found) {
    console.log("wooray");
}
else {
     console.log("your city stinks");
}
0 голосов
/ 17 июня 2019
    if(found == "no") {
        console.log("your city stinks");
    }

это если оператор должен находиться вне цикла for.

, но если вам нужна более короткая версия

var cityToCheck = "Gwanda"

var cleanestCities = ["Bulawayo","gweru","Gwanda","falls","plumtree"];

console.log((cleanestCities.indexOf(cityToCheck) > -1) ? "wooray":"your city    stinks");

0 голосов
/ 17 июня 2019

Хорошо только искать город в цикле, и если город найден, измените флаг found и, основываясь на found, зарегистрируйте что-нибудь в консоли.

как это:

var cityToCheck = prompt("your humble city?");
var cleanestCities = [ "Bulawayo", "gweru", "Gwanda", "falls", "plumtree" ];
var found = "no";
for (var i = 0; i < 5; i++) {
    if (cityToCheck == cleanestCities[i]) {
        found = "yes";
        break;
    }
}

if(found == "yes")
    console.log("wooray");
else if (found == "no")
    console.log("your city stinks");

Я также предлагаю вам использовать found в качестве логического значения. Я имею в виду это:

var cityToCheck = prompt("your humble city?");
var cleanestCities = [ "Bulawayo", "gweru", "Gwanda", "falls", "plumtree" ];
var found = false;
for (var i = 0; i < 5; i++) {
    if (cityToCheck == cleanestCities[i]) {
        found = true;
        break;
    }
}

if(found)
    console.log("wooray");
else
    console.log("your city stinks");
0 голосов
/ 17 июня 2019

Ваша проблема здесь:

if(found = "no"){

Причина этой проблемы в том, что JavaScript оценивает found = "no" как выражение, присваивающее значение "no" found;так как это назначение, оно вернет true.Вам нужен второй знак =, чтобы проверить равенство:

if(found == "no"){

Возьмите меньший пример:

var i;
if(i == 5) console.log("i is 5");
if(i = 5) console.log("Oops! I just set i to 5");

Ваш результат будет:

К сожалению!Я просто установил для i значение 5

Редактировать:

Еще одна вещь, которую вы можете рассмотреть, это вытащить if (found == "no") из цикла.Таким образом, он проверяется только один раз, в конце цикла.

Если ваш город, например, «падает», вы получите 3 «ваш город воняет», потому что он проверяет 3 города перед «падением»первый - ни один из которых не соответствует «падению».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...