我正在努力将两个对象数组(从区块链数据中提取)根据对象值合并为一个新数组。
目标是获取与用户的最新交互。
这个问题面临的数据结构是一个简化但接近的表示:
interface MsgSlice {
messageId: string;
messageDataSlice: {
senderId?: string;
receiverId: string;
timestamp: number;
};
};
const latestReceivedMsgs: MsgSlice[] = [
{
messageId: "messageId1",
messageDataSlice: {
senderId: "userId1",
receiverId: "ownerId", // <- always same in that array
timestamp: 101,
},
},
{
messageId: "messageId3",
messageDataSlice: {
senderId: "userId2",
receiverId: "ownerId",
timestamp: 103,
},
},
{
messageId: "messageId5",
messageDataSlice: {
senderId: "userId3",
receiverId: "ownerId",
timestamp: 105,
},
},
];
const latestSentMsgs: MsgSlice[] = [
{
messageId: "messageId2",
messageDataSlice: {
// senderId: "ownerId",
receiverId: "userId1",
timestamp: 102,
},
},
{
messageId: "messageId4",
messageDataSlice: {
receiverId: "userId3",
timestamp: 104,
},
},
];
期望的结果应该包含最新的 messageId,即被相应用户“发送到”或“接收到”的消息。类似这样:
const latestInteraction = [
{
user: "userId1",
messageId: "messageId2",
timestamp: 102,
},
{
user: "userId2",
messageId: "messageId3",
timestamp: 103,
},
{
user: "userId3",
messageId: "messageId5",
timestamp: 105,
},
]
作为解决方案,我考虑循环遍历这些数组,并在每次迭代中循环另一个数组来比较
senderId
和 receiverId
值。如果 "senderId
等于其中一个循环到的 receiverId
",则可以将其发送到一个 interaction
数组中,然后进行时间排序和过滤。不幸的是,我无法弄清楚如何使其正常工作。我的思路可能有限,在我的解决方案概念中可能有更有效的方法。
messageId
。对于这种情况,据我所见,该数组内部的顺序并不重要。但是如果必须选择,那么应按时间戳排序。 - tenxsoydev