Ich mache einige Chemie-Spiel als ein Telegram-Bot in JavaScript, wo Sie ein Inventar haben und Sie müssen die richtigen Chemikalien mischen. Ich habe das Inventar in einem Array, und um zu verhindern, dass Sie Ihren Weg auf ein Level durch einfaches Einfügen Ihres Inventars erzwingen, muss ich überprüfen, ob die Benutzereingaben ausschließlich die benötigten Chemikalien enthalten und keine der anderen in der Array.Wie überprüft man, ob eine Zeichenfolge ein bestimmtes Element aus einem Array enthält, aber nicht die anderen Elemente?
Zum Beispiel:
users[id].inventory = ["Beaker", "Water", "Baking soda", "Heating plate", "Hydrochloric acid"];
if (users[id].level === 1 &&
msg.text.toLowerCase().indexOf('baking soda') !== -1 &&
msg.text.toLowerCase().indexOf('hydrochloric acid') !== -1 &&
msg.text.toLowerCase().indexOf('beaker') === -1 &&
msg.text.toLowerCase().indexOf('water') === -1 &&
msg.text.toLowerCase().indexOf('heating plate') === -1) {
msg.answer("You mix some baking soda with hydrochloric acid.\nSome fun fizzing happens and you produce useless CO2 gas.");
}
Auf higer Ebenen werden Sie ein viel größeres Inventar erhalten und dies zu sehr große if-Aussagen auf diese Weise führen wird. Das sieht schlecht aus und es muss einen besseren Weg geben. Gibt es so etwas wie eine exklusive indexOf()
oder eine andere Lösung? Ich habe zum Beispiel arr.filter()
ausgecheckt, aber ich kann keinen guten Weg finden, dies zu implementieren.
Haben Sie versucht, mit einer Schleife über das Array zu durchlaufen? – nnnnnn