javascript - 如何连接具有匹配 ID 的数组内的对象?
问题描述
我收到一组对象,说明哪些事件发生了变化。以下代码是此类更改的示例。还有其他字段也可以更改,但它们不会出现在此处。
[{ "eventId": "1", "name": "name_a", "isCancelled": "true"},
{ "eventId": "1", "name": "name_a", "date": "2018-11-17T00:00:00.000Z"},
{ "eventId": "2", "name": "name_b", "Status": "Postponed"},
{ "eventId": "3", "name": "name_c", "isCancelled": "true"},
{ "eventId": "3", "name": "name_c", "status": "Private"}]
有没有办法可以组合具有相同 ID 的对象?类似的东西。
[{ "eventId": "1", "name": "name_a", "isCancelled": "true", "date": "2018-11-17T00:00:00.000Z"},
{ "eventId": "2", "name": "name_b", "Status": "Postponed"},
{ "eventId": "3", "name": "name_c", "isCancelled": "true", "status": "Private"}
我见过很多线程,他们主要专注于通过匹配它们的 ID 来组合 2 个数组。
解决方案
您可以使用for .. of
如下所示循环遍历每个元素,然后基于event id
concat 对象
let arr = [{ "eventId": "1", "name": "name_a", "isCancelled": "true"},
{ "eventId": "1", "name": "name_a", "date": "2018-11-17T00:00:00.000Z"},
{ "eventId": "2", "name": "name_b", "Status": "Postponed"},
{ "eventId": "3", "name": "name_c", "isCancelled": "true"},
{ "eventId": "3", "name": "name_c", "status": "Private"}]
let o = {}
for(let d of arr) {
o[d['eventId']] = { ...(o[d['eventId']] || {}), ...d }
}
console.log(Object.values(o))
推荐阅读
- ravendb - 我可以优化 Ravendb 以创建索引吗
- c# - 平滑的摄像机旋转到玩家面对的方向
- sql - 比较 SQL Server 中的两个日期列
- azure - Azure API 没有授权
- javascript - 为什么 Javascript 可折叠在 IE 中不起作用?
- python-3.x - NSSM Python 服务因模块错误而暂停
- angular - 模块内的路由器出口不适用于 ngForm
- python - 如何在 Python 中使用 OSMnx 填充水体
- matplotlib - 使用 matplotlib 设置注释和条之间的宽度
- delphi - 禁用时如何使 TTreeView 不突出显示所有节点?