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

问题描述 投票:0回答:1

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

var ranking = [{
    def: "0.58",
    league: "Scottish Premiership",
    name: "Celtic",
    off: "3.33",
    grank: "3",
    tform: "96.33",
},
{
    def: "2.52",
    league: "Scottish Premiership",
    name: "Dundee",
    off: "1.28",
    grank: "302",
    tform: "27.51",
}]
var matches = [{
date: "2010-04-22",
league: "Scottish Premiership",
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",
league: "Scottish Premiership",
home: "0.0676",
away: "0.8",
draw: "0.1324",
goals1: "3",
goals2: "1",
tform1: "96.33",
tform2: "27.51",
def1: "0.58",
def2: "2.52",
off1: "3.33",
off2: "1.28",
grank1: "3",
grank2: "302",
team1: "Celtic",
team2: "Dundee",}]

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

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

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

请我需要一些见解来完成这项任务。

javascript arrays merge concatenation
1个回答
0
投票

创建一个函数来提取独特的道具并在您想要的每个对象列表上调用它。

var ranking = [{
    def: "0.58",
    league: "Scottish Premiership",
    name: "Celtic",
    off: "3.33",
    grank: "3",
    tform: "96.33",
  },
  {
    def: "2.52",
    league: "Scottish Premiership",
    name: "Dundee",
    off: "1.28",
    grank: "302",
    tform: "27.51",
  }
]
var matches = [{
  date: "2010-04-22",
  league: "Scottish Premiership",
  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)

© www.soinside.com 2019 - 2024. All rights reserved.