我正在制作一个简单的AI聊天程序。我有一份我可以提出的问题清单,它根据我的要求给出了答案。
----------------------这是我的键值对数组------------------ ---------
var dictionary = {
"HOW ARE YOU?": ["im fine thanks",
"Im okayish",
"im good, how are you?"
],
"SUP?" : ["nothing much", "google" window.open("http://www.google.com");]
}
如何使用随机函数从数组中选择随机输出。
var random = parseInt(Math.random() * dictionary[question.toUpperCase()].length); // Returns a random number between 0 and the arraysize
answer = dictionary[question.toUpperCase()][random];
现在我的问题是,假设我问AI" sup?"它应该显示"什么都不是"或者说" google"并打开谷歌。
但这不起作用。基本上,该数组中的window.open()
会导致javascript崩溃。
如果我将数组更改为: -
"SUP?" : ["nothing much", "google" ]
即没有window.ppen()
功能,它确实有用。
有什么建议吗?
答案 0 :(得分:1)
您可以尝试更复杂的数据结构:
var dictionary = {
"HOW ARE YOU?": [{ message: "im fine thanks" },
{ message: "Im okayish" },
{ message: "im good, how are you?" }],
"SUP?" : [{ message: "nothing much" },
{ message: "google",
action: function() { window.open("http://www.google.com"); }
}]
}
然后检查所选答案是否有动作并调用它。
function randomElem(array) {
return array[parseInt(Math.random() * array.length)];
}
function getAnswer(question) {
var answers = dictionary[question.toUpperCase()];
if (!answers) {
return { message: "I dont know what you mean!" };
} else {
return randomElem(answers);
}
}
function processInput(question) {
var answer = getAnswer(question);
show(answer.message); // replace it with whatever you use to show the answer
if (answer.action) {
answer.action();
}
}
答案 1 :(得分:0)
"google" window.open("http://www.google.com");
不是正确的JSON值。
相反,你可以做一些像,
if(answer === 'google') window.open("http://www.google.com");
让dictionary
只存储字符串。
答案 2 :(得分:0)
尝试在获得答案后打开Google链接
var random = parseInt(Math.random() * dictionary[question.toUpperCase()].length);
answer = dictionary[question.toUpperCase()][random];
if(answer=="google"){
window.open("http://www.google.com")
}