gpt4 book ai didi

JavaScript : array manipulation

转载 作者:行者123 更新时间:2023-12-04 01:10:39 26 4
gpt4 key购买 nike

我用 React js 开发聊天应用这是我的对象数组

const messages = [ 
{message: "ghhhhhhhh", receiver: "faty", sender: "harry", time: "10/1/2019 12:56"},
{message: "ggggggghjjgcgh", receiver: "harry", sender: "marie", time: " 10/1/2019 12:45"},
{message: "good afternoon", receiver: "harry", sender: "marie", time: " 10/1/2019 12:41"},
{message: "hfdsghfdfhjo", receiver: "faty", sender: "harry", time: " 10/1/2019 12:38"},
{message: "hhhhhhhhhhhhh ", receiver: "harry", sender: "faty", time: " 10/1/2019 11:50"}
];

我想显示每个人之间的最后一条消息

我尝试了下面的代码,但他没有呈现我想要的内容

    const senders =messages.reduce((a, c) => {
a[c.sender] = a[c.sender] || { data: [] };
a[c.sender].data.push({ sender: c.sender, message: c.message, time: c.time, receiver: c.receiver, hotel_id: c.hotel_id, isseen: c.isseen });
a[c.sender].data.sort((a, b) =>{console.log(new Date(b.time),'aaaaaaaaaaaaaa');return ( new Date(b.time).getTime() - new Date(a.time).getTime())})
return a;
}, {})
var messageInbox = Object.values(senders).map(s => s.data[0])
console.log("Latest messages:", messageInbox);

这是我要显示的内容:

  {message: "ghhhhhhhh", receiver: "faty", sender: "harry", time: "10/1/2019 12:56"},
{message: "ggggggghjjgcgh", receiver: "harry", sender: "marie", time: " 10/1/2019 12:45"}

让我解释一下我有两个人 faty 和 harry 他们之间有很多消息我想显示他们之间的最后一条消息,同样是 harry 和 marie 之间的消息

如果你明白我的问题,请帮助我,谢谢

最佳答案

如果您不关心一对接收者是发送者还是接收者(因此 Hary 可能是接收者/发送者,而 Faty 反之亦然)——看来您小心,根据您的预期输出 - 那么下面的代码应该可以工作。首先,我按倒序 时间顺序对消息进行排序,因为这样当使用 reduce 进行迭代时,第一个唯一的收件人组合将是它们之间的最后一条消息。

然后我为收件人对制作唯一键,无论他们是收件人还是发件人,方法是将它们添加到一个数组,对该数组进行排序,然后对其进行 JSON 字符串化。排序使得您将获得收件人之间的最后一条消息,而不管谁是收件人和谁是发件人 - 如果您想要 Hary 和 Faty 的两个条目,每个条目分别表示他们是收件人还是发件人,那么删除排序。

如果我在每次 reduce 迭代中返回的对象还没有那个键,我就使用那个键添加消息;如果它确实有那个条目,我就跳过它,因为我们已经有了那个特定收件人对的最后一条消息。最后,我对 reduce 返回的对象调用了 Object.values。

代码也在这个回复:https://repl.it/@dexygen/lastMessagesBetweenRecipientPairs

messages.sort((a,b)=>{new Date(b.time) - new Date(a.time)}); // reverse time order

const lastMessagesBetweenRecipientPairs = messages.reduce((lastMessages, msg) => {
let key = JSON.stringify([msg.sender, msg.receiver].sort());
if (!lastMessages[key]) lastMessages[key] = msg;
return lastMessages;
}, {});

console.log(Object.values(lastMessagesBetweenRecipientPairs));

输出:

[ { message: 'ghhhhhhhh',
receiver: 'faty',
sender: 'harry',
time: '10/1/2019 12:56' },
{ message: 'ggggggghjjgcgh',
receiver: 'harry',
sender: 'marie',
time: ' 10/1/2019 12:45' } ]

关于JavaScript : array manipulation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59680033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com