繁体   English   中英

从数组内的对象中获取最大的 int

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM