循环遍历数组检查indexOf更简单?

时间:2014-03-11 17:10:45

标签: javascript for-loop jscript

好的,就像标题所说的那样。我有一个看起来像这样的数组:

var hiTriggers = new Array();
hiTriggers = ["hi", "hai", "hello"];

如果找到其中任何一个,我想检查它。我可以通过以下方式实现这一目标:

if(message.indexOf("hi") >= 0) {
   // do whatever here!
}

但我正在寻找一种更有效的方式,而不是做100次if()检查。例如使用" hiTriggers"。

循环遍历数组

我尝试了以下内容:

for(var i; i < hiTriggers.length; i++) {
    console.log(hiTriggers[i]); // simply to know if it checked them through)
    if(message.indexOf(hiTriggers[i]) >= 0) {
    //do stuff here
}
}

遗憾的是,我没有按照我想要的方式工作,因为它根本没有检查。 在此先感谢,我希望我的帖子能够理解!

编辑;请注意我已发送消息&#39;已经宣布&#39;在另一个地方。

4 个答案:

答案 0 :(得分:4)

它没有运行,因为你没有给i变量一个初始值。它是undefined

更改为使用var i=0;

for(var i=0; i < hiTriggers.length; i++) {
    //console.log(hiTriggers[i]); // simply to know if it checked them through)
    if(message.indexOf(hiTriggers[i]) >= 0) {
        //do stuff here
        console.log("found " + hiTriggers[i]);
    }
}

答案 1 :(得分:0)

使用for in循环可以更简单地编写:

for(var v in hiTriggers){
    if(message.indexOf(hiTriggers[v]) >= 0) {
        //do stuff here
        console.log("found " + hiTriggers[v]);
    }
}

答案 2 :(得分:0)

尝试使用regular expression来匹配邮件。 \b是单词边界标记,|字符之间的单词是搜索的内容。如果消息中出现任何单词,则message.match将返回匹配数组,否则为null

var pattern = /\b(Hello|Hi|Hiya)\b/i;
var message = "Hello World";
if (message.match(pattern))
{
    console.log("do stuff");
}

答案 3 :(得分:0)

问题是becoz - 你还没有初始化你的var i,把它变成var i = 0;

您可以尝试每个循环。

hiTriggers.forEach(function(e) {

  if(message.indexOf(e) >= 0) {
   //do sthg here
  }
})