将唯一的对象添加到Javascript中的对象数组

时间:2018-10-12 17:47:46

标签: javascript arrays object lodash

我有一系列看起来像这样的对象:

const array1 = [{id: 1, name: "John"}, {id: 2, name: "Mary"}]

const array2 = [{id: 1, name: "John"}, {id: 3, name: "Phil"}, {id: 4, name: "Sarah"}]

如何从array2 to array1添加唯一对象,所以看起来像这样:

const array1 = [{id: 1, name: "John"}, {id: 2, name: "Mary"}, {id: 3, name: "Phil"}, {id: 4, name: "Sarah"}]

Lodash实现是允许的。非常感谢。

3 个答案:

答案 0 :(得分:0)

您可以使用_.unionBy()函数合并数组中的唯一对象。

const array1 = [{id: 1, name: "John"}, {id: 2, name: "Mary"}];

const array2 = [{id: 1, name: "John"}, {id: 3, name: "Phil"}, {id: 4, name: "Sarah"}];


console.log(_.unionBy(array1, array2, 'id'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

答案 1 :(得分:0)

使用本机数组函数,您可以获得以下预期结果:

  • 首先使用.concat()来连接两个数组
  • 使用.reduce()创建以ID为键,值作为相关对象的结果对象。如果已经添加了对象,则跳过其他具有相同ID的对象。
  • 使用Object.values()从结果对象中获取对象数组。

演示:

const array1 = [{id: 1, name: "John"}, {id: 2, name: "Mary"}],
      array2 = [{id: 1, name: "John"}, {id: 3, name: "Phil"}, {id: 4, name: "Sarah"}];

const result = Object.values(
    array1.concat(array2).reduce((r, c) => (r[c.id] = r[c.id] || c, r),  {})
);
                   
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

您还可以通过本地Map objectreduce一行完成此操作:

const arr1 = [{id: 1, name: "John"}, {id: 2, name: "Mary"}]
const arr2 = [{id: 1, name: "John"}, {id: 3, name: "Phil"}, {id: 4, name: "Sarah"}]

const result = [...[...arr1, ...arr2]
   .reduce((r, c) => (r.set(c.id, c), r), new Map()).values()]

console.log(result)