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))]
如果您的订单或订单中的元素数量可能会改变,这将是混乱的,如果没有,您可以像这样保存它们以进行比较。
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]
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);
添加回答
举报