Javascript Discord.js角色检查优化

Javascript Discord.js角色检查优化,javascript,discord,discord.js,Javascript,Discord,Discord.js,我目前正在构建一个discord验证机器人,这是该机器人的一个功能,它可以检查每个必需类别中是否有一个角色,然后在最后生成角色摘要。目前,我有一个工作解决方案,它的功能也完全符合我的要求,但它使用了大量的if,我对js非常陌生,但有人告诉我,尽可能不要使用大型if/if-else-if堆栈。我已经研究过开关案例,但不知道如何在这里应用它们,所以我想知道是否有更优化的方法来实现我的需求。我目前的代码如下: var hasrole = false; var role = "";

我目前正在构建一个discord验证机器人,这是该机器人的一个功能,它可以检查每个必需类别中是否有一个角色,然后在最后生成角色摘要。目前,我有一个工作解决方案,它的功能也完全符合我的要求,但它使用了大量的if,我对js非常陌生,但有人告诉我,尽可能不要使用大型if/if-else-if堆栈。我已经研究过开关案例,但不知道如何在这里应用它们,所以我想知道是否有更优化的方法来实现我的需求。我目前的代码如下:

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链方便得多