#discord #discord.js #leaderboard
Вопрос:
У меня возникли некоторые проблемы с сортировкой данных по двум параметрам для команды таблицы лидеров на Discord.js бот. В настоящее время у меня есть приложение, в котором пользователи отсортированы по уровням. Единственная проблема с этим заключается в том, что, когда есть два пользователя с одинаковым уровнем, его нужно сортировать по тому, у кого больше опыта:
Пример:
Пользователь1: 20 латов; 50/200XP
Пользователь2: 20 латов; 80/200XP
Пользователь2 должен появиться перед Пользователем 1
Я пробовал различные решения, которые я нашел, но ни одно из них не решило проблему, любая помощь в этом очень ценится, спасибо!
Данные об уровне и данные XP, хранящиеся здесь:
let level = db.all().filter(data => data.ID.startsWith(`guild_646074330249429012_level`)).sort((a, b) => b.data - a.data)
let userXP = db.all().filter(data => data.ID.startsWith(`guild_646074330249429012_xp`)).sort((a, b) => b.data - a.data)
Комментарии:
1. Разве сортировка только по XP не даст вам желаемый результат? Поскольку Lvl основан на XP, сортировка по XP сортирует и то, и другое.
2. Это то, о чем я думал и раньше, но я понял, что, когда пользователь повышает уровень, его xp сбрасывается. Итак, допустим, например, у кого-то 30-й уровень с 800/1000 XP, а у другого пользователя 31 — й уровень с 8/1500 XP. Пользователь 30-го уровня будет находиться перед пользователем 31-го уровня просто потому, что его текущий опыт выше, хотя его уровень ниже
3. Ах, ладно, в вашем вопросе не было ясно, что XP не накапливается. Спасибо за разъяснение.
4. Да, в моем ответе используется Math.pow, чтобы предотвратить эту проблему.
Ответ №1:
Попробуйте это:
leaderboard.sort((b, a) => ((a.rank 1)*(a.xp)) - (Math.pow((b.rank 1), 10)*(b.xp)))
//replace leaderboard with whatever array has all the ranks and xps
//also, idk how to get rank and xp from your code so I just did .rank and .xp
Таким образом, вы сортируете все сразу
Комментарии:
1. Я попробую это сделать, не слишком уверен, как настроить его с моими данными, но стоит попробовать, ценю это
2. Пожалуйста, отметьте это как принятое, если это помогло! Кроме того, независимо от того, в каких переменных хранятся ранги и xp, замените этим a.ранг, b.ранг, a.xp и b.xp!