[英]Get largest int from object inside of array that's under a limit
我目前正在构建一个 Discord.js 机器人,如果我想根据你达到的级别给予角色奖励。
这是我确定要赋予什么角色的代码的主要部分,当您的角色奖励只有 1 级差异(所以从 1 到 2 级)时,这非常有效,但如果我从 4 级到 5 级则没有知道要删除什么并且只是崩溃,因为prevLvl
未定义。
当您达到某个里程碑时,它需要赋予一个新角色并删除以前的角色。
memberData.level = 4;
levelUpRoles = [ //These ones get pushed in array by user
{role: 'id1', level: 1},
{role: 'id2', level: 2},
{role: 'id3', level: 5},
{role: 'id4', level: 20},
{role: 'id5', level: 10},
]
let newLvl = levelUpRoles.find(object => object.level === memberData.level);
let prevLvl = levelUpRoles.find(object => object.level === memberData.level - 1);
if (newLvl) {
target.roles.add(newLvl.role).catch(console.error);
target.roles.remove(prevLvl.role).catch(console.error);
}
这是我迄今为止能够想出的:
我将prevLvl
更改为:
let prevLvl = levelUpRoles.filter(object => object.level < memberData.level).sort(function (a, b) {return a.level - b.level}).slice(0,-1).slice(-1);
let newLvl = levelUpRoles.find(object => object.level === memberData.level);
if (newLvl) {
console.log(newLvl);
target.roles.add(newLvl.role).catch(console.error);
console.log(prevLvl);
if (prevLvl) {
target.roles.remove(prevLvl.role).catch(console.error);
}
}
它首先过滤我级别以下的所有角色,然后按级别对所有角色进行排序,然后删除我当前的角色,然后删除除最高级别之外的所有角色。
在修改了我帖子的编辑部分后,我终于设法做到了!
let prevLvl = levelUpRoles.filter(object => object.level <= memberData.level).sort(function (a, b) {return a.level - b.level}).slice(0,-1).slice(-1);
let newLvl = levelUpRoles.find(object => object.level === memberData.level);
if (newLvl) {
target.roles.add(newLvl.role).catch(console.error);
if (prevLvl[0]) {
target.roles.remove(prevLvl[0].role).catch(console.error);
}
}
这就是我想出的......首先只按级别过滤与我的级别较小或相同的角色。 然后我把数组从小到大排序,然后我把所有东西都剪掉了,除了第二高的那将是我之前的奖励。
感谢所有帮助并引导我朝着正确方向前进的人!
假设levelUpRoles
将始终按升序排列,您可以使用>
运算符检查memberData.level
上方最低level
值的索引。
然后,从该索引中,找到新级别和先前级别并进行必要的操作。
levelUpRoles = [
{role: 'id1', level: '1'},
{role: 'id2', level: '2'},
{role: 'id3', level: '5'},
]
let nextIndex = levelUpRoles.findIndex(object => object.level > memberData.level);
if (nextIndex) {
nextIndex > 0 || nextIndex = levelUpRoles.length; // If there is no next level
const newLvl = levelUpRoles[nextIndex-1];
target.roles.add(newLvl.role).catch(console.error);
if (nextIndex > 1) { // If there exists a previous level
const prevLvl = levelUpRoles[nextIndex-2];
target.roles.remove(prevLvl.role).catch(console.error);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.