如何在 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 中对该数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mongodb javascript 中对数据库数据进行排序? (节点.js)