for if语句不迭代整个数组

时间:2016-10-11 02:03:00

标签: javascript arrays if-statement for-loop

我很尴尬地问这样一个基本问题。但如果这是我的知识中的一个基本或简单的差距,我宁愿得到一个解释,为什么我可以尽早开始养成良好的习惯。

我有一个函数,它接受一个字符串作为参数,并将其与数组值进行比较。

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 for循环时,它只会检查第一个数组hello[0],然后它似乎会中断。我怎么能阻止这种情况发生?我在返回true之后尝试使用continue;,但这也没有修复它。我觉得我应该知道这一点,但我完全是在脑力训练,无法弄清楚原因。 谢谢!

3 个答案:

答案 0 :(得分:7)

由于您的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并停止功能执行。

答案 1 :(得分:2)

您的return语句违反了该功能。如果您删除了return语句,它会遍历整个数组(虽然看起来您实际上并没有做任何事情,所以我不知道您是怎么做的知道那个)。

如果您只想在数组中greetings时返回true,那么这就是您正在寻找的内容:

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已移至循环外部。这样,只要找到greetings,它就会返回true,否则它将完成循环,然后返回false。

答案 2 :(得分:0)

我在您的代码中添加了注释并更改了错误的部分。 移除else块并将return false;放出for循环。这将产生一个完整的for循环。只有if语句的条件为truefor循环才会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.
}