我正在努力将两个对象数组(从区块链数据中提取)合并为一个基于对象值的新array.
其目标是获得与用户的最新交互.
A simplified but close representation of the data structure this problem is faced in:个
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,
},
},
];
所需结果应包含‘发送给’相应用户或‘由’相应用户‘接收’的最新消息ID.大概是这样的:
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
数组中,然后对时间进行排序和过滤.不幸的是,我想不出如何让它工作.此外,我认为我的 idea 可能局限在这里,可能有比我的解决方案概念更有效的方法来做到这一点.