как объединить 4 объекта массива с помощью lodash - PullRequest
0 голосов
/ 29 мая 2020

Я ищу лучшие способы сделать это.

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" },
];

Конечный результат, который я хочу, - это массив слияния с loda sh:

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

Как мне сделать это наиболее эффективным / чистым способом с помощью loda sh? Спасибо!

1 Ответ

2 голосов
/ 29 мая 2020

Не нужен loda sh!

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]));
...