动态合并不同数组中的所有对象添加名称而不是忽略

问题描述

我要结合两个具有共同属性的数组:

var ranking = [{
    def: "0.58",league: "Scottish Premiership",name: "Celtic",off: "3.33",grank: "3",tform: "96.33",},{
    def: "2.52",name: "Dundee",off: "1.28",grank: "302",tform: "27.51",}]
var matches = [{
date: "2010-04-22",home: "0.0676",away: "0.8",draw: "0.1324",goals1: "3",goals2: "1",tform1: "96.33",tform2: "27.51",team1: "Celtic",team2: "Dundee",}]

预期输出如下:

[{
date: "2010-04-22",def1: "0.58",def2: "2.52",off1: "3.33",off2: "1.28",grank1: "3",grank2: "302",}]

要合并数组,我使用了Lodash _.merge函数

var result = _.merge(ranking,matches);

返回的输出确实合并了一些对象,并省略了同类对象。

在完成这项任务时,我需要一些见识。

解决方法

创建一个函数以提取独特的道具并在所需的每个对象列表上调用它。

var ranking = [{
    def: "0.58",league: "Scottish Premiership",name: "Celtic",off: "3.33",grank: "3",tform: "96.33",},{
    def: "2.52",name: "Dundee",off: "1.28",grank: "302",tform: "27.51",}
]
var matches = [{
  date: "2010-04-22",home: "0.0676",away: "0.8",draw: "0.1324",goals1: "3",goals2: "1",tform1: "96.33",tform2: "27.51",team1: "Celtic",team2: "Dundee",}]

function extractUniqueProps(arr) {
  return arr.reduce((acc,x,i) => {
      keys = Object.keys(x);
      keyValue = keys.map((y,j) => ({
        [y + i]: x[y]
      })).reduce((acc2,y) => ({
        ...acc2,...y
      }),{})
      acc = {
        ...acc,...keyValue
      }
      return acc;

    },{}

  )
}

const result = { ...extractUniqueProps(ranking),...extractUniqueProps(matches)
}

console.log(result)