我有一个值事件,它是一个带有如下地图的列表列表:
[
[
{
"packageId": "2721",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 831,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
}
],
[
{
"packageId": "2738",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 832,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
}
],
[
{
"packageId": "2721",
"eventTime": "2022-03-20T16:25:00Z",
"type": "deviated-manually-overridden",
"id": 842,
"createdAt": "2022-03-20T16:26:00.363630Z",
"createdBy": "47"
},
{
"packageId": "2721",
"eventTime": "2022-03-20T16:38:00Z",
"type": "deviated-manually-overridden",
"id": 844,
"createdAt": "2022-03-20T16:38:46.352751Z",
"createdBy": "47"
},
{
"packageId": "2721",
"eventTime": "2022-03-20T20:31:00Z",
"type": "collected-manually-overridden",
"id": 846,
"createdAt": "2022-03-20T20:32:18.046346Z",
"createdBy": "47"
},
{
"packageId": "2721",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 829,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
}
],
[
{
"packageId": "2738",
"eventTime": "2022-03-20T16:25:00Z",
"type": "deviated-manually-overridden",
"id": 843,
"createdAt": "2022-03-20T16:26:00.363630Z",
"createdBy": "47"
},
{
"packageId": "2738",
"eventTime": "2022-03-20T16:38:00Z",
"type": "deviated-manually-overridden",
"id": 845,
"createdAt": "2022-03-20T16:38:46.352751Z",
"createdBy": "47"
},
{
"packageId": "2738",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 830,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
}
],
[
{
"packageId": "2721",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 833,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
}
],
[
{
"packageId": "2738",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 834,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
}
]
]
我想通过地图的 packageId 将此列表分组为一个列表,以便具有相同 packageId 的每个地图都是列表的一部分。同时,我还想过滤掉具有相同packageId、type和eventTime的映射,这样我就只有一个字段值相同的映射。我想要实现的是:
[
[
{
"packageId": "2721",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 831,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
},
{
"packageId": "2721",
"eventTime": "2022-03-20T16:25:00Z",
"type": "deviated-manually-overridden",
"id": 842,
"createdAt": "2022-03-20T16:26:00.363630Z",
"createdBy": "47"
},
{
"packageId": "2721",
"eventTime": "2022-03-20T16:38:00Z",
"type": "deviated-manually-overridden",
"id": 844,
"createdAt": "2022-03-20T16:38:46.352751Z",
"createdBy": "47"
},
{
"packageId": "2721",
"eventTime": "2022-03-20T20:31:00Z",
"type": "collected-manually-overridden",
"id": 846,
"createdAt": "2022-03-20T20:32:18.046346Z",
"createdBy": "47"
}
],
[
{
"packageId": "2738",
"eventTime": "2022-03-15T11:24:12.200864Z",
"type": "created",
"id": 832,
"createdAt": "2022-03-15T11:24:12.200864Z",
"createdBy": "47"
},
{
"packageId": "2738",
"eventTime": "2022-03-20T16:25:00Z",
"type": "deviated-manually-overridden",
"id": 843,
"createdAt": "2022-03-20T16:26:00.363630Z",
"createdBy": "47"
},
{
"packageId": "2738",
"eventTime": "2022-03-20T16:38:00Z",
"type": "deviated-manually-overridden",
"id": 845,
"createdAt": "2022-03-20T16:38:46.352751Z",
"createdBy": "47"
}
]
]
我不确定如何使用 groupBy 或 filter 来实现这个数据结构。我试过了:
events.groupBy(listOfEvents => listOfEvents.map(e => e.get('packageId')))
但是,这显然行不通。我该怎么办?
更新:
我已尝试按照答案的建议创建地图:
const grouped = Map<string, List>()
events.map(list => list.map(event => {
const packageId = event?.get('packageId')
console.log('packageId ', packageId)
if (packageId) {
console.log('grouped packageId: ', grouped.get(packageId))
if (!grouped.get(packageId)) {
grouped.set(packageId, List())
}
const updatedList = grouped.get(packageId)?.push(event)
console.log('updatedList: ', updatedList)
if (updatedList) grouped.set(packageId, updatedList)
console.log('grouped: ', grouped)
}
}))
console.log('grouped ', grouped)
但是,这并没有在 Map 中设置任何值,我看到 packageId 已记录,但其他所有内容都未定义并以 0 的大小分组。我在这里做错了什么?
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容