【问题标题】:Merging duplicated data objects from the response从响应中合并重复的数据对象
【发布时间】:2021-06-25 08:52:43
【问题描述】:

我有一个如下所示的 api 响应

response = [
  { id: 1, val: 'A', date: '28/03/2021', versions: [] },
  { id: 1, val: 'B', date: '29/03/2021', versions: [] },
  { id: 1, val: 'C', date: '30/03/2021', versions: [] },
  { id: 2, val: 'D', date: '31/03/2021', versions: [] }
]

很明显,id:1 的最新值为C。我需要将其转换为如下所示

response = [
  { id: 2, val: 'D', date: '31/03/2021', versions: ['31/03/2021'] },
  { id: 1, val: 'C', date: '30/03/2021', versions: ['28/03/2021', '29/03/2021', '30/03/2021'] }
]

也就是说,id:1 有三个版本,id:2 只有一个版本。

我试过这样的

_.uniqBy(_.orderBy(response, 'date','desc'), 'id');

上面的代码删除了重复项并显示了最新的 id:1 的值,但不确定要使用哪个 lodash 函数以及如何添加版本。任何线索都会非常有帮助。

【问题讨论】:

    标签: json angular typescript lodash


    【解决方案1】:

    试试这样:

    let result = [];
    
    let uniqueIds = [...new Set(response.map(x => x.id))];
    
    uniqueIds.forEach(id => {
      let items = [...response.filter(x => x.id == id)];
      var maxDate = new Date(Math.max.apply(null, items.map(y =>  new Date(y.date))));;
    
      result.push({
        id: id,
        date: maxDate,
        versions :[...items.map(y =>  y.date)]
      });
    });
    

    检查Demo

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 2019-04-10
      • 1970-01-01
      • 2013-12-26
      相关资源
      最近更新 更多