如何在javascript和Lodash中通过键合并对象

如何在javascript和Lodash中通过键合并对象,javascript,object,merge,lodash,Javascript,Object,Merge,Lodash,我有一组对象: [ { id: 1, oid: 5, dates: { 5: {start_date: "12.30", end_date: "12.31" }, 14: {start_date: "01.01", end_date: "01.15" } } }, { id: 2, oid: 5, dates: { 17: {start_date: "02.01", end_date: "02.20"

我有一组对象:

[
  {
    id: 1, oid: 5, 
    dates: { 
      5: {start_date: "12.30", end_date: "12.31" },
      14: {start_date: "01.01", end_date: "01.15" }
    }
  },
  {
    id: 2, oid: 5, 
    dates: { 
      17: {start_date: "02.01", end_date: "02.20" },
      19: {start_date: "03.01", end_date: "03.10" }
    }
  }
]
如何按日期键合并并使用Lodash获得此结果

{
  5: {start_date: "12.30", end_date: "12.31" },
  14: {start_date: "01.01", end_date: "01.15" },
  17: {start_date: "02.01", end_date: "02.20" },
  19: {start_date: "03.01", end_date: "03.10" }
}
您可以使用reduce对对象进行迭代,并将结果合并在一起。根本不需要使用Lodash。

使用Lodash

您可以使用获取日期对象的数组。要将对象合并为单个对象,将使用。我们将使用添加一个目标对象,这样就不会改变原始数据。此外,我们将在uz.merge上使用该方法,以便它可以处理对象数组:

[
  {
    id: 1, oid: 5, 
    dates: { 
      5: {start_date: "12.30", end_date: "12.31" },
      14: {start_date: "01.01", end_date: "01.15" }
    }
  },
  {
    id: 2, oid: 5, 
    dates: { 
      17: {start_date: "02.01", end_date: "02.20" },
      19: {start_date: "03.01", end_date: "03.10" }
    }
  }
]
var data=[{id:1,oid:5,日期:{5:{start_date:12.30,end_date:12.31},14:{start_date:01.01,end_date:01.15}},{id:2,oid:5,日期:{17:{start_date 02.01,end_date 02.20},19:{start_date 03.01,end_date 03.10}]; var result=\.spread\.partial\.merge,{}\.mapdata,'dates'; console.logresult;
使用lodash,您可以首先使用以下命令将日期和日期组合在一起:


仅供参考,您的预期输出格式不正确密钥是什么?@Alexandru IonutMihai I gues OP正在查找[{},{},{}]格式。@Rajesh,是的,但他按密钥分组。但是…钥匙的名字是什么?\n好的。我把问题写错了。我编辑了问题。但日期是日期:{}而不是日期:[]。也许我需要转换为数组?您的dates对象无效,因为它缺少属性名。这是无效的{{}。这是有效的{prop:{}。好的。我把问题写错了。我编辑问题。
let result = _.assign({}, ..._.map(data, 'dates'))