indexOf innerhalb von Switch

8

Ich habe einen Javascript-basierten Bot für einen Xat-Chatraum, der auch als KI fungiert. Ich habe mich kürzlich dazu entschlossen, den AI-Teil zu wiederholen, da er zu einer absolut massiven Kette von else if -Aussagen wird, mit der es fast unmöglich wird, damit zu arbeiten.

Ich habe etwas recherchiert und eine neue Idee entwickelt, wie ich mit Antworten umgehen soll. Ich gebe dir zuerst das Codesegment:

%Vor%

Die Idee hier ist, msgRes (die Eingabe des Benutzers) zu überprüfen und zu sehen, in wie vielen Fällen es übereinstimmt. Dann wird für jede Übereinstimmung push die Antwort in das botResponse -Array übernommen und am Ende antwortet sie mit allen Nachrichten in diesem Array.

Beispiel

Benutzer-Msg: Hi! How are you?

msgRes: hi how are you

Bot-Treffer:

hi & gt; schiebt HELLO. auf Array

how are you & gt; schiebt I AM FINE. auf Array

Bot antwortet: HELLO. I AM FINE.

Das wiederum erspart mir die Mühe, für jede mögliche Kombination eine if schreiben zu müssen.

Nachdem ich jedoch ein wenig mehr darüber gelesen habe, bin ich mir nicht sicher, ob es möglich ist, indexOf in einem Switch zu verwenden. Kennt jemand einen Weg um dies oder eine bessere Idee für den Umgang mit Antworten auf die gleiche Weise?

BEARBEITEN:

Um das XY-Problem zu vermeiden (um mein Problem zu verdeutlichen)

Ich brauche eine saubere Alternative zur Verwendung einer massiven Kette von else if -Anweisungen. Es wird Hunderte von Wortsegmenten geben, auf die der Bot antworten wird. Ohne die Möglichkeit, nach Übereinstimmungen zu suchen, müsste ich für jede Kombination ein neues else if schreiben.

Ich hoffe auf eine Möglichkeit, dass es jede Anweisung nach einer Übereinstimmung durchsucht und dann die Antwort für jede Übereinstimmung in einer einzigen Zeichenfolge kombiniert.

EDIT 2: Ich sollte auch hinzufügen, dass dies auf Tampermonkey läuft und keine Webseite.

    
Leaf 09.03.2014, 01:48
quelle

2 Antworten

5

Meine zwei Cent für den Kern dessen, was Sie versuchen zu tun:

%Vor%

Meiner Meinung nach ist es einfacher, dieses Programm zu ändern, da Sie den Seed nur bearbeiten müssen, wenn Sie in Zukunft mehr Antworten haben. Sie können sogar den Seed in einer JSON-Datei speichern und sie (über Ajax) lesen, so dass das Programm nicht geändert werden muss, wenn weitere Nachrichten vorhanden sind.

    
ailveen 09.03.2014, 02:07
quelle
18

Sie müssen nur mit "true" anstelle von "msgRes" vergleichen (da Fälle === Vergleich verwenden) und "break" verwenden, um das lästige Fallen des Switch-Verhaltens zu verhindern:

%Vor%

Dies ist ein perfekt gültiges logisches Verzweigungsmuster, das als "überlasteter Schalter" bezeichnet wird. Viele Leute wissen vielleicht nicht, dass jedes case: ein Ausdruck ist, nicht nur ein Wert, also könntest du sogar ein IIFE bei Bedarf einfügen ...

    
dandavis 09.03.2014 02:57
quelle