【发布时间】:2022-06-20 11:28:25
【问题描述】:
我有一个值events,它是一个列表列表,其地图如下所示:
[
[
{
"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<Event>>()
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<Event>())
}
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 已记录,但其他所有内容都是 undefined 和 grouped 的大小为 0。我在这里做错了什么?
【问题讨论】:
标签: javascript typescript immutable.js