如何使用lodash合并4个数组对象

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

我正在寻找实现此目的的最佳方法。

exData1 = [
  { name: "b", data1: "aa" },
  { name: "c", data1: "ee" },
];
exData2 = [
  { name: "a", data2: "cc" },
  { name: "b", data2: "bb" },
];
exData3 = [
  { name: "a", data3: "ee" },
  { name: "c", data3: "eee" },
];
exData4 = [
  { name: "a", data4: "ff" },
  { name: "b", data4: "cc" },
];

我想要的最终结果是与lodash合并的数组:

resultData = [{
    name: "b",
    data1: "aa",
    data2: "bb",
    data4: "cc",
  },
  {
    name: "c",
    data1: "ee",
    data3: "eee",
  },
  {
    name: "a",
    data2: "cc",
    data3: "eee",
    data4: "ff"
  },
];

如何使用lodash来最有效/最简洁的方式?谢谢!

javascript arrays object merge lodash
1个回答
0
投票

不需要lodash!

function combine(items = []) {
  return Object.values(items.flat().reduce((a, c) => {
    a[c.name] = {...(a[c.name] || {}), ...c};
    return a;
  }, {}));
}

exData1 = [
  { name: "b", data1: "aa" },
  { name: "c", data1: "ee" },
];
exData2 = [
  { name: "a", data2: "cc" },
  { name: "b", data2: "bb" },
];
exData3 = [
  { name: "a", data3: "ee" },
  { name: "c", data3: "eee" },
];
exData4 = [
  { name: "a", data4: "ff" },
  { name: "b", data4: "cc" },
];

console.log(combine([exData1, exData2, exData3, exData4]));
© www.soinside.com 2019 - 2024. All rights reserved.