30秒学会 JavaScript 片段 · 2022年2月12日

30秒学会 JavaScript 片段 – Combine object arrays

Combines two arrays of objects, using the specified key to match objects.

  • Use Array.prototype.reduce() with an object accumulator to combine all objects in both arrays based on the given prop.
  • Use Object.values() to convert the resulting object to an array and return it.

代码实现

const combine = (a, b, prop) =>
  Object.values(
    [...a, ...b].reduce((acc, v) => {
      if (v[prop])
        acc[v[prop]] = acc[v[prop]]
          ? { ...acc[v[prop]], ...v }
          : { ...v };
      return acc;
    }, {})
  );

const x = [
  { id: 1, name: 'John' },
  { id: 2, name: 'Maria' }
];
const y = [
  { id: 1, age: 28 },
  { id: 3, age: 26 },
  { age: 3}
];
combine(x, y, 'id');
// [
//  { id: 1, name: 'John', age: 28 },
//  { id: 2, name: 'Maria' },
//  { id: 3, age: 26 }
// ]

翻译自:https://www.30secondsofcode.org/js/s/combine-object-arrays