如何在 Discord.js 中对该数组进行排序?

Posted

技术标签:

【中文标题】如何在 Discord.js 中对该数组进行排序?【英文标题】:How can I sort this array in Discord.js? 【发布时间】:2021-09-01 14:09:57 【问题描述】:

我有一个数组,看起来像这样(大小变化):

[
   '385090261019131915': 34 ,
   '746430449240375297': 2 ,
   '810189312175374408': 1 ,
   '830832432680009789': 8 ,
   '850073735272988692': 1 
]

第一个值是会员ID,第二个是用户有多少条消息。 如何对数组进行排序,以获取前 10 个成员,按他们发送的消息排序? 代码:

if(command === 'leaderboard')
        const list = []
        fs.readdirSync('./db/user/messages').forEach(file => 
            const user = JSON.parse(fs.readFileSync(`./db/user/messages/$file` , 'utf-8'))
            userid = file.replace('.json','');
            const entry = [userid] : user.userall
            list.push(entry)
        )
    

【问题讨论】:

【参考方案1】:

要按数字对数组进行排序,您可以使用带有比较函数的.sort() 方法,该函数从第一个值中减去第二个值:

const arr = [34, 2, 1, 8, 1]
const sorted = arr.sort((a, b) => b - a)

console.log( sorted )

当您使用对象时,您应该按对象键排序,但您使用用户 ID 作为键,因此您不知道它们。但是,您可以使用 [Object.values()][2] 方法获取值并按它们排序:

const arr = [
   '385090261019131915': 34 ,
   '746430449240375297': 2 ,
   '810189312175374408': 1 ,
   '830832432680009789': 8 ,
   '850073735272988692': 1 
]
const sorted = arr.sort((a, b) => Object.values(b)[0] - Object.values(a)[0])

console.log( sorted )

不要忘记Object.values() 返回一个数组,因此您需要比较第一个元素。

但是,我将在对象中使用两个不同的键,一个用于 ID,一个用于分数,而不是使用用户 ID 作为键和点作为值:

const list = [
   id: '385090261019131915', score: 34 ,
   id: '746430449240375297', score: 2 ,
   id: '810189312175374408', score: 1 ,
   id: '830832432680009789', score: 8 ,
   id: '850073735272988692', score: 1 
]
const sortedList = list.sort((a, b) => b.score - a.score)

console.log( sortedList )

最后的代码:

if (command === 'leaderboard') 
  const list = []

  fs.readdirSync('./db/user/messages').forEach((file) => 
    const user = JSON.parse(
      fs.readFileSync(`./db/user/messages/$file`, 'utf-8'),
    )
    const userId = file.replace('.json', '')

    list.push( id: userId, score: user.userall )
  );

  // sort by score
  const sortedList = list.sort((a, b) => b.score - a.score)

【讨论】:

以上是关于如何在 Discord.js 中对该数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ColdFusion 中对结构数组进行排序

如何在 C# 中对二维(矩形)数组进行排序?

discord js如何通过降序对json文件进行排序

如何在 mongodb javascript 中对数据库数据进行排序? (节点.js)

我将如何按其中一个子值对该表进行排序,以及如何从中获得最佳结果? [复制]

如何在C中对指向char的指针数组进行qsort?