【问题标题】:How to list points from highest to lowest?如何从最高到最低列出点?
【发布时间】:2021-06-11 08:40:57
【问题描述】:

此代码随机显示积分列表,我想从最高到最低显示积分列表。

if (command == prefix + 'points') {
    if (!message.guild.member(client.user).hasPermission('EMBED_LINKS'))
        return message.channel.send(':no_entry: | I dont have Embed Links permission.');
    
    if (!args[1]) {
        if (!points)
            return message.channel.send(embed);
        
        var members = Object.values(points, null, 5);
        var memb = members.filter(m => m.points >= 1);
        if (memb.length == 0)
            return message.channel.send(embed);
        
        var x = 1;
        let pointsTop = new Discord.MessageEmbed()
        .setAuthor('Points:')
        .setColor('#79758F')
        .setDescription(
            memb.sort(
                (second, first) => first.points > second.points
            )
            .slice(0, 10)
            .map(m => `<@${m.id}> \`${m.points}\``).join('\n')
        )
        message.channel.send({ embed: pointsTop });

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    你可以在Array#sort()中使用-

    .setDescription(memb.sort((a, b) => a.points - b.points).slice(0, 10).map(m => `${m} \`${m.points}\``).join('\n');
    

    【讨论】:

      【解决方案2】:

      排序函数应该返回数字,而不是布尔值

      这是代码示例中唯一重要的部分:

      memb.sort(
          (second, first) => first.points > second.points
      )
      

      您的自定义排序函数返回一个布尔值。 Array.prototype.sort 不是这样工作的。

      • 如果第一个参数应该排在第二个参数之前,则返回一个负数
      • 如果第二个参数应该排在第一个参数之前,则返回一个正数
      • 如果两者都不在另一个之前,则返回 0

      你可能想要这个:

      memb.sort(
          (first, second) => second.points - first.points
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多