为了账号安全,请及时绑定邮箱和手机立即绑定

从数组中获得最高角色

从数组中获得最高角色

慕侠2389804 2021-08-20 16:55:31
我目前有一个数组u._roles,其中填充了来自“581199939464462340”等组的 ID。其次,我有一个字典,其中键是角色 ID,值是名称,例如{key: "581199939464462340", value: "Member"}.现在我想获取数组的“最高”角色的名称。目前我有这个丑陋的 if 语句,但我认为可以做得更好,但是如何?(数组u._roles是只读的)。u._roles 可能如下所示:["5812040340469414946", "581200340469415946", "581209222700597248"]所以“最高”将是“581200340469415946”(第二个如果)。(然后从字典中获取这个id的名字roleMap)var Rank;if (u._roles.includes("581199939464462340")) {    Rank = roleMap["581199939464462340"]; // highest} else if (u._roles.includes("581200340469415946")) {    Rank = roleMap["581200340469415946"]; //} else if (u._roles.includes("581214123334041620")) {    Rank = roleMap["581214123334041620"]; // } else if (u._roles.includes("588976480017448988")) {    Rank = roleMap["588976480017448988"]; //} else if (u._roles.includes("581203853635223574")) {    Rank = roleMap["581203853635223574"]; // } else if (u._roles.includes("581209222700597248")) {    Rank = roleMap["581209222700597248"]; // } else if (u._roles.includes("592436270031175681")) {    Rank = roleMap["592436270031175681"]; // lowest} else {    Rank = "";}最高并不意味着最高的数字。它只是我喜欢使用的命令。
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

我们只是将正确的顺序保存在一个数组中,循环它并检查该值是否包含在角色中。如果是,find将返回它,我们可以将其放入 roleMap[ findvalue]。


let order = ["581199939464462340", "581200340469415946", "581214123334041620", "588976480017448988", "581203853635223574", "581209222700597248","592436270031175681"],

    roles = ["5812040340469414946", "581200340469415946", "581209222700597248"];


let rank = order.find(v => roles.includes(v)); 


console.log(rank) // => 581200340469415946

将代码中的排名行替换为:


let rank = roleMap[order.find(v => roles.includes(v))]

如果您的订单或订单中的元素数量可能会改变,这将是混乱的,如果没有,您可以像这样保存它们以进行比较。


查看完整回答
反对 回复 2021-08-20
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我用一些新的见解彻底改变了这个答案。希望这会更有帮助。



const rolePriority = {a:1, b:2, c:3, d:4};

const u = {"_roles": ['b','c', 'a']};


const rankNumber = u._roles.reduce((highest, role) => {

  const rank = rolePriority[role];

  return rank < highest ? rank : highest;

}, Infinity);


const rank = rankNumber === Infinity ? "" : roleMap[rankNumber]


查看完整回答
反对 回复 2021-08-20
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

首先复制数组,然后按角色属性对其进行排序并取第一个元素。


var data = [{

    name: "Rank 1",

    role: "5812040340469414946",

  },

  {

    name: "Rank 2",

    role: "581200340469415946"

  },

  {

    name: "Rank 3",

    role: "581209222700597248"

  }

];


// Copy the source array to avoid mutating it using destructuring it

var copy = [...data];


// Sort by role property

var rank = copy.sort((a, b) => (+a.role) - (+b.role))[0].name;

console.log(rank);


查看完整回答
反对 回复 2021-08-20
  • 3 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信