Je fais un simple programme de chat AI. J'ai une liste de questions que je peux poser, et cela me donne une réponse basée sur ce que j'ai demandé.

---------------------- Ceci est mon tableau de paires de valeurs clés --------------------- ------

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");]
}

Comment sélectionner une sortie aléatoire dans le tableau à l'aide d'une fonction aléatoire.

var random = parseInt(Math.random() * dictionary[question.toUpperCase()].length); // Returns a random number between 0 and the arraysize

answer = dictionary[question.toUpperCase()][random];

Maintenant, mon problème est, supposons que je demande à l'IA "sup?" il doit afficher "rien de plus" ou dire "google" et ouvrir google.

Mais ça ne marche pas. Fondamentalement, le window.open() dans ce tableau fait planter le javascript.

Si je change le tableau en: -

"SUP?" : ["nothing much", "google" ]

C'est-à-dire que sans la fonction window.ppen(), cela fonctionne.

Aucune suggestion?

1
Jasim 9 mars 2016 à 10:54

3 réponses

Meilleure réponse

Vous pouvez essayer une structure de données un peu plus complexe:

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"); }
              }]
}

Ensuite, vous vérifiez si une réponse sélectionnée a une action et l'invoquez.

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
Lukasz Wiktor 9 mars 2016 à 09:17

"google" window.open("http://www.google.com"); n'est pas une valeur JSON appropriée. Au lieu de cela, vous pourriez faire quelque chose comme, if(answer === 'google') window.open("http://www.google.com"); Et demandez au dictionary de stocker uniquement les chaînes.

0
s4san 9 mars 2016 à 07:58

Essayez d'ouvrir le lien google après avoir obtenu la réponse

var random = parseInt(Math.random() *   dictionary[question.toUpperCase()].length); 
answer = dictionary[question.toUpperCase()][random];
if(answer=="google"){
 window.open("http://www.google.com")
}
0
user4858836 9 mars 2016 à 08:04