Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按特定顺序查找对象数组中的元素_Javascript_Arrays_Express_Javascript Objects - Fatal编程技术网

Javascript 按特定顺序查找对象数组中的元素

Javascript 按特定顺序查找对象数组中的元素,javascript,arrays,express,javascript-objects,Javascript,Arrays,Express,Javascript Objects,如何按特定的权重顺序查找对象数组元素 当前权重为admin>acc\u holder>manager。如果角色数组有roleadmin,它将返回roleId,如果没有,它将找到roleacc\u holder,然后manager是最后一个。我已经在底部写了代码,但它很难看,就像地狱一样 角色对象数组: [ { role: "manager", roleId: 2, }, { role: "adm

如何按特定的权重顺序查找对象数组元素

当前权重为
admin>acc\u holder>manager
。如果角色数组有role
admin
,它将返回
roleId
,如果没有,它将找到role
acc\u holder
,然后
manager
是最后一个。我已经在底部写了代码,但它很难看,就像地狱一样

角色对象数组:

[
    {
        role: "manager",
        roleId: 2,
    },
    {
        role: "admin",
        roleId: 4,
    },
    {
        role: "acc_holder",
        roleId: 3,
    },
]
代码:

有人能帮我改进功能吗?

这应该可以:

const rolarr=[{
角色:“经理”,
罗莱德:2,
},
{
角色:“管理员”,
罗莱德:4,
},
{
角色:“acc_持有人”,
罗莱德:3,
},
]
//const roleOrders=[process.env.ROLE_ADMIN,process.env.ROLE_ACC_HOLDER,process.env.ROLE_MANAGER];
const roleOrders=['admin','acc_holder','manager'];
const selectedRole=roleOrders.reduce((结果,findRole)=>{
返回结果| | rolarr.find(({
角色
})=>角色===findRole)
},空);

console.log(selectedRole)我在下面解释了两种方法

但是有一件小事你需要记住

role\u数组
是否始终包含唯一的角色记录,或者同一角色是否存在多个记录?如果是这样,你想要什么样的行为?你是要取第一个还是最后一个


方法1(循环时保持最高角色)只需在记录上循环一次,并保持当前的最高角色。在这种方法中,如果存在具有相同角色的多个记录,您将始终获得最后一条记录。在这种情况下,时间复杂度的顺序将是
O(n)

//全局变量
//角色权重={[process.env.ROLE\u ADMIN]:1[process.env.ROLE\u MANAGER]:2[process.env.ROLE\u ACC\u HOLDER]:3};
角色权重={'admin':1,'acc_holder':2,'manager':3};
//主要方法
函数getHighestRole(角色数组=[]){
让最高的角色=角色数组[0];
角色数组.forEach((记录)=>{
if(角色权重[最高角色.角色]>角色权重[记录.角色]){
最高职位=记录
}
})
返回最高的_角色;
}
角色数组=[{role:“manager”,roleId:2},{role:“admin”,roleId:4},{role:“acc_holder”,roleId:3}];
log(getHighestRole(角色数组));
role_数组=[{role:“manager”,roleId:2},{role:“acc_holder”,roleId:3}];
log(getHighestRole(角色数组))
const roleAdmin = roleArr.find((role) => {
    if (role.role === process.env.ROLE_ADMIN) {
        roleReturn = {
            role: role.role,
            roleId: role.roleId,
        }
    }
})
if (!roleAdmin) {
    const roleAccHolder = roleArr.find((role) => {
        if (role.role === process.env.ROLE_ACC_HOLDER) {
            roleReturn = {
                role: role.role,
                roleId: role.roleId,
            }
        }
    })
    if (!roleAccHolder) {
        const roleManager = roleArr.find((role) => {
            if (role.role === process.env.ROLE_MANAGER) {
                roleReturn = {
                    role: role.role,
                    roleId: role.roleId,
                }
            }
        })
    }
}