#javascript #arrays #if-statement #for-loop
#javascript #массивы #if-statement #for-цикл
Вопрос:
Мне неловко задавать такой фундаментальный вопрос. Но если это фундаментальный или простой пробел в моих знаниях js, я бы предпочел получить объяснение, почему, чтобы я мог начать вырабатывать хорошие привычки раньше, чем позже.
У меня есть функция, которая принимает строку в качестве аргумента и сравнивает ее со значениями массива.
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i ){
if(greetings === hello[i]){
return true;
}else{
return false;
}
}
}
Похоже, что каждый раз, когда я запускаю этот цикл for, он проверяет только первый массив hello[0]
, а затем, похоже, прерывается. Как я могу предотвратить это? Я попытался использовать continue;
after return true, но это тоже не помогло. Я чувствую, что должен это знать, но я полностью запутался и не могу понять, почему.
Спасибо!
Ответ №1:
Это из-за вашего return false
оператора, вы должны поместить его вне цикла и удалить else
оператор:
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i ){
if(greetings === hello[i]){
return true;
}
}
return false;
}
Объяснение: Когда greetings
аргумент не равен первому элементу 'hello'
, тогда код выполнит else
оператор, который возвращает false
и останавливает выполнение функции.
Ответ №2:
Ваши return
операторы выходят из функции. Если вы удалите return
операторы, он будет проходить через весь массив (хотя похоже, что вы на самом деле ничего не делаете, поэтому я не знаю, как вы это узнаете).
Если вы просто хотите вернуть значение true, если greetings
оно находится в массиве, то это то, что вы ищете:
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i ){
if(greetings === hello[i]){
return true;
}
}
return false;
}
Обратите внимание, что возвращаемое значение false было перемещено за пределы цикла. Таким образом, он вернет true, как только greetings
будет найден, в противном случае он завершит цикл, а затем вернет false .
Ответ №3:
Я добавляю примечания в ваш код и изменяю неправильную часть. Удалите else
блок и return false;
выведите его из for
цикла. Это создаст полный for
цикл. Единственным условием if
оператора является true
то, for
что цикл будет return
. И если for
цикл завершается без возврата, return false;
будет выполнен следующий оператор.
function validateHello(greetings){
var hello = ['hello','ciao','salut','hallo', 'hola', 'ahoj','czesc'];
for(var i = 0; i < hello.length; i ){
if(greetings === hello[i]){
return true;
}
/* if you add a else block here. it means you want your 'else condition' to be checked in every single loop. Since 'if statement has a 'return' and 'else' statement has a 'return'. So if there is a 'else' here, no matter what condition you add , your for loop can only be executed once. */
}
return false; // only the for loop is over and no return. this statement will be executed.
}