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
。如果角色数组有roleadmin
,它将返回roleId
,如果没有,它将找到roleacc\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,
}
}
})
}
}