首页 > 解决方案 > 如何连接具有匹配 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 个数组。

标签: javascriptnode.js

解决方案


您可以使用for .. of如下所示循环遍历每个元素,然后基于event idconcat 对象

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))


推荐阅读