我有两个数组
第一个:const triggerWord = ["what", "how", "where", "who", "can"];
第二个:const myArray = query.split(" ");
—在分割用户输入后创建,在本例中称为query。
1是固定数量的字符串,不会改变,因为它们是触发词。另一个数组是一个输入字符串,它被分割成一个数组,中间用空格分隔。
我试图建立某种控制流,如果任何的triggerWords都存在于myArray中,那么它应该调用一个特定的函数调用questionFunction()。然而else
是,它应该调用语句函数。以下是我尝试过的函数:
#1: Switch Case:
switch (lowercaseMyArray.includes()) {
case triggerWord[0].toString():
questionFunction(lowercaseMyArray);
break;
case triggerWord[1].toString():
questionFunction(lowercaseMyArray);
break;
case triggerWord[2].toString():
questionFunction(lowercaseMyArray);
break;
case triggerWord[3].toString():
questionFunction(lowercaseMyArray);
break;
default:
statementFunction(lowercaseMyArray);
#2: If语句
if (lowercaseMyArray.includes(triggerWord[0] || triggerWord[1] || triggerWord[2] || triggerWord[3], 2)) {
//alert("This is a question");
questionFunction(lowercaseMyArray);
//passe onto questionFunction
} else {
statementFunction(lowercaseMyArray);
//alert(myArray);
}
#3: Bool and If语句
var lowercaseMyArrayBool = lowercaseMyArray.includes(triggerWord);
if (lowercaseMyArrayBool === true) {
questionFunction(lowercaseMyArray);
} else {
statementFunction(lowercaseMyArray);
}
的想法是,如果它包含一个触发词,那么输入必须是一个问题,因此被视为这样。但是,如果它不包含触发词,则输入是一个语句,必须按此处理。
任何帮助或指点将不胜感激。
使用以下代码解决此问题:
const intersection = triggerWord.filter(element => lowercaseMyArray.includes(element)).length;
const intersectionBool = Boolean(intersection);
我只需要将过滤后的数组长度转换为布尔值,以获得准确的true或false结果。