Как объединить два массива в JavaScript и удалить дублирующиеся элементы? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть два массива

var array1 = [{firstName:'John', age:32, email:'xyz1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];
var array2 = [{firstName:'Jen', age:29, email:'abc1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];

Я хотел бы объединить два массива и получить следующий вывод

var array3 = [{firstName:'John', age:32, email:'xyz1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}, {firstName: 'Jen', age: 29, email: 'abc1@email.com'}];

Хотелось бы узнать лучший способ объединения двух массивов в JavaScript чтобы я получал только уникальные элементы из каждого массива?

1 Ответ

0 голосов
/ 19 февраля 2020

Ответ

Это можно сделать с помощью операторов покоя, объекта Set и методов JSON:

[ ...new Set([...a1, ...a2].map(JSON.stringify)) ].map(JSON.parse);

Пример

var array1 = [{firstName:'John', age:32, email:'xyz1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];
var array2 = [{firstName:'Jen', age:29, email:'abc1@email.com'}, {firstName:'Jack', age:40, email:'xyz2@email.com'}];

function joinArrays(a1, a2) {
 return [ ...new Set([...a1, ...a2].map(JSON.stringify)) ].map(JSON.parse);
}

console.log(joinArrays(array1, array2));

Объяснение:

Вы комбинируете массивы, используя операторы покоя:

[...a1, ...a2]

Вы превращаете объекты в строки с помощью JSON.stringify :

[...a1, ...a2].map(JSON.stringify)

Вы помещаете эти строки в Set. Наборы не допускают дублирования Примитивных Значений ( строки, числа и т. Д. c)

new Set([...a1, ...a2].map(JSON.stringify))

Вы используете Оператор покоя, чтобы поместить Set в Array

[...new Set([...a1, ...a2].map(JSON.stringify))]

Вы отображаете массив, используя JSON.parse, чтобы превратить строки обратно в объекты, за исключением дубликатов.

[ ...new Set([...a1, ...a2].map(JSON.stringify)) ].map(JSON.parse);
...