我目前有一个数组u._roles
,其中填充了来自“ 581199939464462340”等组的ID。
其次,我有一个字典,其中的键是角色ID,值是名称,例如{key: "581199939464462340", value: "Member"}
。
现在,我想获取数组“最高”角色的名称。目前,我有这个难看的if语句,但是我认为可以做得更好,但是如何呢? (数组u._roles
是只读的。)
u._roles看起来像这样:
["5812040340469414946", "581200340469415946", "581209222700597248"]
,因此“最高”为“ 581200340469415946”(如果是第二个)。 (然后从字典roleMap
中获得此ID的名称)
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 = "";
}
最高代表最高数字。这只是我喜欢使用的命令。
答案 0 :(得分:3)
我用一些新见解完全改变了这个答案。希望这会有所帮助。
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]
答案 1 :(得分:2)
我们只是将正确的顺序保存在数组中,对其进行循环,然后检查值是否包含在角色中。如果是,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))]
如果您的订单或订单中的元素数量可能会发生变化,这将很麻烦,否则,您可以像这样保存它们以进行比较。
答案 2 :(得分:1)
首先复制该数组,然后按role属性对其进行排序,并获取第一个元素。
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);