首页 > 解决方案 > 合并对象数组中具有匹配属性的对象

问题描述

我有点卡住了在具有匹配属性的数组中合并对象(在本例中为“广告”)advertGroupId。对于匹配的属性,我想保留最早的并用最新的startDate覆盖。endDate本质上,将广告组合在一起。(额外的好处是将个人也分组advertId到一个数组中,但在这种情况下不是必需的)

我知道如何将两个对象合并在一起(例如const newObj = {...obj1, ...obj2}),但这让我有点难过!我在网上找不到任何其他示例,因此将不胜感激。

这是我的问题的一个例子:

const arrayOfAdverts = [
  {
    advertId: 1234,
    startDate: '2020-03-04',
    endDate: '2020-03-04',
    advertGroupId: 1
  },
  {
    advertId: 1235,
    startDate: '2020-03-05',
    endDate: '2020-03-05',
    advertGroupId: 1
  },
  {
    advertId: 1236,
    startDate: '2020-03-07',
    endDate: '2020-03-07',
    advertGroupId: 1
  },
  {
    advertId: 1237,
    startDate: '2020-03-10',
    endDate: '2020-03-10',
    advertGroupId: 2
  },
  {
    advertId: 1238,
    startDate: '2020-03-11',
    endDate: '2020-03-11',
    advertGroupId: 2
  }
]

我正在寻找的最终结果是:

const newArray = [
  {
    advertId: [1234, 1235, 1236],
    startDate: '2020-03-04',
    endDate: '2020-03-07',
    advertGroupId: 1
  },
  {
    advertId: [1237, 1238],
    startDate: '2020-03-10',
    endDate: '2020-03-11',
    advertGroupId: 2
  }
]

正如我所说,对个人 ID 进行分组不是必需的,但会很不错。

提前致谢!

标签: javascriptarraysecmascript-6

解决方案


推荐阅读