javascript - message.content.startWith 的替代方案
问题描述
我正在使用不和谐的机器人,并且正在使用页面执行帮助命令。
我有这个设置:
if(message.content.startWith(`${prefix}help`))
和
if(message.content.startWith(`${prefix}help 2`))
如果我这样做,>help 2
我会得到两个。有没有办法阻止这种情况发生?
解决方案
使用startsWith(">help")
(not startWith) 时,它将匹配 ">help 2",因为该字符串确实以 ">help" 开头。如果您想更精确地匹配这些案例,您应该将最具体的案例放在首位并else if
用于后续比较。
if (message.content.startsWith(`${prefix}help 2`)) { /* do 2 */ }
else if (message.content.startsWith(`${prefix}help 3`)) { /* do 3 */ }
else if (message.content.startsWith(`${prefix}help 4`)) { /* do 4 */ }
else if (message.content.startsWith(`${prefix}help`)) { /* do other */ }
else if (message.content.startsWith(`${prefix}faq`)) { /* do faq */ }
如果第一种情况不匹配,上面的代码只会匹配第二种情况。
进一步说明:比较部分字符串时,您需要小心匹配正确的内容。看这个例子:
let names = [ "Roberta", "Robert" ]
// case #1 - fails (wrong order)
names.forEach(name => {
let salutation;
if (name.startsWith("Robert"))
salutation = "Mr.";
else if (name.startsWith("Roberta"))
salutation = "Miss";
console.log("1) "+salutation+" "+name);
})
// case #2 - fails (missing else)
names.forEach(name => {
let salutation;
if (name.startsWith("Roberta"))
salutation = "Miss";
if (name.startsWith("Robert"))
salutation = "Mr.";
console.log("2) "+salutation+" "+name);
})
// case #3 - works
names.forEach(name => {
let salutation;
if (name.startsWith("Roberta"))
salutation = "Miss";
else if (name.startsWith("Robert"))
salutation = "Mr.";
console.log("3) "+salutation+" "+name);
})
案例 #1 失败,因为两个名称在第一个 if 语句上匹配,因为这两个名称实际上都以“罗伯特”开头。但我们不希望它与“Roberta”匹配,因为我们对字符串的开头进行了第二次检查。然而,代码从未进入第二个 if 语句,因为它已经与第一个匹配。通过颠倒检查的顺序并首先检查“Roberta”,我们得到了正确的行为,因为它更具体('Robert' 不以'Roberta' 开头,但'Roberta' 确实以'Robert' 开头)。所以重要的部分是让你的 if 语句在更一般的值之前与最具体的匹配。
案例 #2 失败,因为即使第一个 if 语句匹配,第二个也可以匹配。我们想用它else if
来确保如果代码中前面的某些内容已经匹配,我们不会继续检查其他情况。
推荐阅读
- javascript - Javascript:在线状态始终处于离线状态
- r - 关于 SNP 标记位置的中断
- python-3.x - 加入 2 个具有多个条件的 pandas 数据帧,1 个条件基于静态字符串
- swift - 为 SwiftUI 文本视图提供固定宽度并使文本换行到不定高度
- java - 如何在 Java 中使用 Lambda 填充二维数组
- javascript - Issue with Stripe elements.create focus's class
- javascript - 未捕获的类型错误:在我尝试再次执行此操作后无法将属性“innerHTML”设置为 null
- bash - 为什么 $1 在我的 bash for 循环中不起作用?
- python - 合并或连接不均匀行的df - python
- java - 使用递归二分搜索找到未知数