You need to enable JavaScript to run this app. 如何使用Lodash合并接口返回的同ID重复数据并生成版本数组
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lodash合并接口返回的同ID重复数据并生成版本数组

完整实现方案

你之前的链式逻辑仅完成了跨数据全局去重,缺少同id全量数据的聚合环节,无法收集所有历史日期填充versions字段,配合Lodash的_.groupBy做前置分组就能完整实现目标效果。

核心流程

  • 第一步通过_.groupBy按id对原始数据做分组,拿到每个id对应的全部历史条目
  • 对每个分组内的条目按日期倒序排序,取排序后的第一条作为该id的核心字段载体(保留最新的id/val/date原值)
  • 遍历当前分组收集所有条目的date值,组成数组赋值给核心条目的versions字段
  • 最后将所有处理完成的条目按最新日期倒序排序,对齐目标结构的输出顺序

代码实现

简化无额外依赖版本

完全匹配你提供的样例数据格式,可直接运行得到目标输出:

const result = _.chain(response)
  // 按id做分组
  .groupBy('id')
  // 遍历每个分组完成字段加工
  .map((groupItems) => {
    // 取组内日期最新的条目作为核心数据
    const latestRecord = _.orderBy(groupItems, 'date', 'desc')[0]
    // 收集组内所有历史日期组成versions数组
    const versionDateList = _.map(groupItems, 'date')
    return {
      ...latestRecord,
      versions: versionDateList
    }
  })
  // 整体按最新日期倒序排列
  .orderBy('date', 'desc')
  .value()

说明:因为你使用的日期是固定长度的DD/MM/YYYY格式,直接按字符串排序即可得到正确的日期先后顺序,无需额外做日期解析。如果后续日期格式不固定,可在排序逻辑中插入日期转时间戳的处理避免字符串排序误差。

输出校验

运行上述代码得到的结果完全匹配目标结构:

  • id为2的条目排在首位,核心字段为最新的val: 'D'、date: '31/03/2021',versions数组仅包含单条自身日期
  • id为1的条目排在次位,核心字段为最新的val: 'C'、date: '30/03/2021',versions数组按原始数据顺序收集了该id下全部3个历史日期

内容的提问来源于stack exchange,提问作者Ranjith Varatharajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 06:45:03