我一直在用JavaScript编写一个简单的聊天机器人作为练习和乐趣。我希望能够建立它,并在我进行时重构它。
实际上,每次读取新消息时循环的搜索功能对于查找数千个条件都是低效的。
这是代码。每个单词都是一个数组值,它会搜索匹配的大小写。
function simpleReactSearch(handle, msg, pureMsg, priv) {
if (msg[0] === "hooray") {
switch (msg[1]) {
case "hi":
case "hello":
case "greetings":
case "howdy":
case "welcome":
case "hiya":
case "hi-ya":
case "aloha":
return commonReact("greeting", handle, priv);
case "ohayou":
case "morning":
return commonReact("morning", handle, priv);
case "bonjour":
case "konbanwa":
break;
case "konnichiwa":
break;
case "oyasuminasai":
break;
case "goodbye":
case "seeya":
break;
case "sayonara":
break;
case "echo":
pureMsg.splice(0,2);
return "Echo: "+pureMsg.join(' ');
case "say":
pureMsg.splice(0,2);
return pureMsg.join(' ');
}
switch (msg[1]+" "+msg[2]) {
case "good morning":
break;
case "good afternoon":
break;
case "good night":
break;
case "good evening":
case "buenas noches":
break;
case "good day":
case "buenos dias":
break;
case "dewa mata":
case "see ya":
case "see you":
break;
}
}
}
我已经读过,对于这种类型的搜索,数组查找更有效,但即使这对于循环中的数千个条件似乎也不实用。那么,那会是最好的吗?
我在考虑将这些案例和条件存储在配置文件中以便于编辑,但这样效率会更低吗?
我认为,解决这个问题的一种方法是添加各种数据库。如果可能的话,我宁愿不去那条路。
现在我可以看到一种方法可以让它更有效率,那就是只搜索某些开关组,如果句子有适量的单词或特定单词。
总结:
将switch case组转换为数组会不会更好,或者Node.js能否以相同的效率处理数组和switch语句?
除了基本的选择性搜索之外,还有其他方法可以提高效率吗?
答案 0 :(得分:1)
您可以使用一些地图。
所以创建你想要的动作,func1,func2等(使用更具描述性的名字)
然后将它们添加到这样的地图
var map = {
"hi": func1,
"hello": func1,
"test": func2,
"whatever": func3
}
然后你可以做
if(msg[0] === "hooray") {
map[msg[1]]();
}
else
{
map2[msg[0]+" "+msg[1]]();
}