好的,就像标题所说的那样。我有一个看起来像这样的数组:
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;在另一个地方。
答案 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
}
})