我有以下示例代码:
.sort((a, b) => b.createdAt - a.createdAt)
我已经获取并过滤了通道中的消息(该通道有8条消息),但是filter返回了一个集合,并且集合不一定是按顺序排列的。
那么我该如何对邮件进行排序,以便上面的公式起作用?
(请忽略上面屏幕截图中的.first())
集合中有4条消息,.first()仅收集第一条消息,我希望将所有四个值都这样嵌入:
newchannel.fetchMessages().then(messages => {
var valuesA = messages.filter(m => m.author.id === message.author.id).first();
var valuesB = messages.filter(m => m.author.id === message.author.id).second();
var valuesC = messages.filter(m => m.author.id === message.author.id).third();
var valuesD = messages.filter(m => m.author.id === message.author.id).fourth();
const embed = {
"fields": [
{
"name": "Type of code:",
"value": valuesA.content,
"inline": true
},
{
"name": "Type of code:",
"value": valuesB.content,
"inline": true
},
{
"name": "Type of code:",
"value": valuesC.content,
"inline": true
},
{
"name": "Type of code:",
"value": valuesD.content,
"inline": true
}
]
};
}
很显然,这不是完整的代码或完整的嵌入,但是它显示了所需的一切。
如果您有任何问题,请随时在评论中提问。
答案 0 :(得分:1)
Collection
扩展了类型Map
。
Map中的键是有序的,而添加到对象中的键则没有顺序。因此,在对其进行迭代时,Map对象将按插入顺序返回键。
与对象相反,地图具有特定的顺序。
Discord.js Collection
具有sort
方法。
由于fetchMessages
的返回类型在解析后为Promise<Collection<Snowflake, Message>>
,因此您应该能够按createdAt
进行排序。
client.on('message', async function(msg) {
let chan = msg.channel;
let sortedMsgs = await chan.fetchMessages(option)
.then(msgs => {
msgs.sort((a, b) => b.createdAt > a.createdAt)
})
});
免责声明:我现在无法测试此代码。 compareFunction
格式未在文档中定义,因此可能不是>
。
答案 1 :(得分:0)
因此,在寻求帮助几天后,我最终自己找到了解决方案:
我只是不使用.sort()而是使用values [number] .content来选择每条消息。
我的新工作代码:
newchannel.fetchMessages().then(messages => {
var values = messages.filter(m => m.author.id === message.author.id);
values = values.first(4);
const embed = {
"fields": [
{
"name": "Type of code:",
"value": values[0].content,
"inline": true
},
{
"name": "Type of code:",
"value": values[1].content,
"inline": true
},
{
"name": "Type of code:",
"value": values[2].content,
"inline": true
},
{
"name": "Type of code:",
"value": values[3].content,
"inline": true
}
]
};
}