合并来自 2 个数组的数据并重命名键

Merge data from 2 arrays and rename keys

我正在尝试从 2 个端点转换数据以模拟基本 table UI,但目前无法访问数据库。我玩过 lodash 并取得了一些成功,能够根据使用 _.defaults 等的引用合并两个数组,但没有成功。

我正在尝试按行 ID 在平面 table 中显示数据,新插入的键用作列引用

BusData1 = [
  {
    id: 1,
    ObjRef: 1,
    ObjRefLabel: "ObjRef1 - Option 1",
    ObjRefDesc: "Option 1 Desc",
    parentId: null,
  },
  {
    id: 12,
    ObjRef: 1,
    ObjRefLabel: "ObjRef1 - Option 2",
    ObjRefDesc: "Option 2 Desc",
    parentId: null,
  },
];

OtherData2 = [
  {
    id: 21,
    BusDataId: 1,
    ObjRef: 1,
    ObjRefDesc: "Desc",
  },
  {
    id: 22,
    BusDataId: 1,
    ObjRef: 0,
    ObjRefDesc: "Desc",
  },
  {
    id: 31,
    BusDataId: 1,
    ObjRef: 1,
    ObjRefDesc: "Desc",
  },
  {
    id: 32,
    BusDataId: 12,
    ObjRef: 0,
    ObjRefDesc: "Desc",
  },
]; 

我正在尝试使用键值将数组 2 合并到数组 1 中,但是在插入到数组 1 中时,我正在尝试更新键以包含对象 ID,以便每个插入键都有一个唯一的引用。


Combined = [
  {
    id: 1,
    ObjRef: 1,
    BusDataId21ObjRef: 1,
    BusDataId22ObjRef: 0,
    BusDataId31ObjRef: 1,
    ObjRefLabel: "Option 1",
    ObjRefDesc: "Desc",
    parentId: null,
  },
  {
    id: 12,
    ObjRef: 1,
    BusDataId31ObjRef: 0,
    ObjRefLabel: "Option 2",
    ObjRefDesc: "Desc",
    parentId: null,
  },
];

到目前为止,我已经从另一个 Whosebug post 获得了以下内容,但我无法超越这个。

const combine = _.map(otherData2, function(row){
return _.defaults(row, _.find(otherData2, {BusDataID: row.id}

如有任何建议或指导,我们将不胜感激

一个简单的方法

遍历业务数据数组。对于每个业务数据项,在第二个数组中找到属于它的元素,并将它们作为额外条目插入。

BusData1 = [{
    id: 1,
    ObjRef: 1,
    ObjRefLabel: "ObjRef1 - Option 1",
    ObjRefDesc: "Option 1 Desc",
    parentId: null,
  },
  {
    id: 12,
    ObjRef: 1,
    ObjRefLabel: "ObjRef1 - Option 2",
    ObjRefDesc: "Option 2 Desc",
    parentId: null,
  },
];

OtherData2 = [{
    id: 21,
    BusDataId: 1,
    ObjRef: 1,
    ObjRefDesc: "Desc",
  },
  {
    id: 22,
    BusDataId: 1,
    ObjRef: 0,
    ObjRefDesc: "Desc",
  },
  {
    id: 31,
    BusDataId: 1,
    ObjRef: 1,
    ObjRefDesc: "Desc",
  },
  {
    id: 32,
    BusDataId: 12,
    ObjRef: 0,
    ObjRefDesc: "Desc",
  },
];

BusData1.forEach(business => {

  OtherData2.filter(
    other => other.BusDataId == business.id
  ).forEach(
    other => {
      business["BusDataId" + other.id + "ObjRef"] = other.ObjRef
    })
})


console.log(BusData1)

优化

这是 O(n x m)。如果这对于庞大的数组来说还不够快,您可以利用已知的属性吗?

例如,如果对第二个数组中的项目进行排序,使得属于 BusData1 元素 1 的任何条目出现在属于 BusData1 元素 2 的条目之前,您可以通过一次传递完成,即 O(n +m).