Javascript Discord.js角色检查优化
我目前正在构建一个discord验证机器人,这是该机器人的一个功能,它可以检查每个必需类别中是否有一个角色,然后在最后生成角色摘要。目前,我有一个工作解决方案,它的功能也完全符合我的要求,但它使用了大量的if,我对js非常陌生,但有人告诉我,尽可能不要使用大型if/if-else-if堆栈。我已经研究过开关案例,但不知道如何在这里应用它们,所以我想知道是否有更优化的方法来实现我的需求。我目前的代码如下:Javascript Discord.js角色检查优化,javascript,discord,discord.js,Javascript,Discord,Discord.js,我目前正在构建一个discord验证机器人,这是该机器人的一个功能,它可以检查每个必需类别中是否有一个角色,然后在最后生成角色摘要。目前,我有一个工作解决方案,它的功能也完全符合我的要求,但它使用了大量的if,我对js非常陌生,但有人告诉我,尽可能不要使用大型if/if-else-if堆栈。我已经研究过开关案例,但不知道如何在这里应用它们,所以我想知道是否有更优化的方法来实现我的需求。我目前的代码如下: var hasrole = false; var role = "";
var hasrole = false;
var role = "";
var subrole = "";
var istype1 = false;
var istype2 = false;
var istype3 = false;
var istype4 = false;
var counter = 0;
if (message.member.roles.cache.find(r => r.id === "736032207248031765")) {
istype1 = true;
role = "Type 1";
hasrole = true;
counter ++;
}
if (message.member.roles.cache.find(r => r.id === "736032822053175306")) {
istype2 = true;
role = "Type 2";
hasrole = true;
counter ++;
}
if (message.member.roles.cache.find(r => r.id === "736032670013980702")) {
role = "Type 3";
hasrole = true;
counter++
if (message.member.roles.cache.find(r => r.id === "736032716411371581")) {
istype1 = true;
subrole = "Type 1";
} else if (message.member.roles.cache.find(r => r.id === "736032780122849340") {
istype2 = true;
subrole = "Type 2";
} else {
istype3 = true;
}
}
if (message.member.roles.cache.find(r => r.id === "736032870703038534")) {
istype4 = true;
role = "Type 4";
hasrole = true;
counter ++;
}
if (message.member.roles.cache.find(r => r.id === "736033471474172025")) {
istype2 = true;
role = "Type 5";
hasrole = true;
counter ++;
}
if (counter >= 1) {
message.channel.send("More than 1 main role, please have only 1");
return;
} else if (hasrole == false) {
message.channel.send("No main role please get one")
return;
}
好的,我假设你的代码工作正常,只需要一点优化 我的#1建议是使用数组并迭代类型 我的建议是不要硬编码角色ID 我的#3建议是通读您的代码并尝试理解它,因为它现在看起来非常混乱 类型3角色检查中的代码令人困惑,类型5角色检查验证角色2的值 这是我的代码版本
const roles=['736032207248031765','736032822053175306','736032670013980702','736032870703038534','736033471474172025'];
让userRoles=[];
roles.forEach(r=>{
if(message.member.roles.cache.has(r)){
userRoles.push(r);
}
});
如果(userRoles.length>=1){
message.channel.send(“超过1个主要角色,请只有1个”);
返回;
}else if(userRoles.length==0){
message.channel.send(“没有主要角色,请获取一个”)
返回;
}
正如您所看到的,这比整个ifs链方便得多