发挥阵列的最高作用

时间:2019-07-24 13:32:17

标签: javascript arrays node.js

我目前有一个数组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 = "";
}

最高代表最高数字。这只是我喜欢使用的命令。

3 个答案:

答案 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);