#javascript
#javascript
Вопрос:
У меня есть список массивов: ["April", "May", "June", "July"]
Почему это так if(arr[i] === "June")
, result
будет отображаться «Найденный месяц», но if(arr[i] === "April")
или if(arr[i] === "May")
, он будет отображать «Не найден месяц»?
Как я могу пересмотреть код, чтобы result
он отображался Found month
для April
и May
?
function holidays(arr) {
let result = ''
for (let i = 0; i < arr.length; i ){
if(arr[i] === "June"){
result = "Found month"
} else {result = "Didn't find month"}
} return result
}
const months = ["April", "May", "June"];
console.log(holidays(months));
Комментарии:
1. Как только у вас есть совпадение, вы должны немедленно выйти из цикла, иначе следующая итерация уничтожит предыдущий результат.
2. А еще лучше, рассмотрите возможность использования
some
илиfind
в зависимости от того, что вы пытаетесь выполнить здесь.3. Важно, как вы форматируете код, особенно с точки зрения того, насколько он удобочитаем и насколько легко вы можете обнаружить ошибки при просмотре кода. Я бы рекомендовал вам использовать какой-нибудь форматировщик кода, например, prettier.
Ответ №1:
Вам нужно опустить not found
присваивание, потому что в первом цикле вы не можете знать, появляется ли правильный месяц в следующем цикле.
Поэтому переместите это в конец и завершите работу раньше, чем найдено, потому что вам не нужно повторять остальную часть массива.
function holidays(arr) {
for (let i = 0; i < arr.length; i ) {
if (arr[i] === "June") {
return "Found month";
}
}
return "Didn't find month";
}
const months = ["April", "May", "June"];
console.log(holidays(months));
Используйте короткий подход Array#includes
.
function holidays(arr) {
return arr.includes("June")
? "Found month"
: "Didn't find month";
}
const months = ["April", "May", "June"];
console.log(holidays(months));
Ответ №2:
Вы должны выйти из массива, чтобы новый результат не переопределял старый результат.
function holidays(arr) {
let result = ''
for (let i = 0; i < arr.length; i ) {
if (arr[i] === "May") {
result = "Found month"
break
} else {
result = "Didn't find month"
}
}
return result
}
const months = ["April", "May", "June"];
console.log(holidays(months));
Ссылка на MDN для break
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break
Но, если вам нужно проверить, содержит ли массив что-то, вы должны использовать Array.includes
:
function holidays(arr) {
return (arr.includes("May") ? "Found": "Not found")
}
const months = ["April", "May", "June"];
console.log(holidays(months));
Ссылка на MDN для Array.prototype.includes
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
Кроме того, в приведенном выше примере для Array.includes
я использовал нечто, называемое троичными операторами: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator