从阵列中选择键值对时无法执行功能

时间:2016-03-09 07:54:15

标签: javascript

我正在制作一个简单的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()功能,它确实有用。

有什么建议吗?

3 个答案:

答案 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)

尝试在获得答案后打开Goog​​le链接

var random = parseInt(Math.random() *   dictionary[question.toUpperCase()].length); 
answer = dictionary[question.toUpperCase()][random];
if(answer=="google"){
 window.open("http://www.google.com")
}