Что-то красивое решение на ночь глядя не получается.
А ведь хочется, чтобы работало с любым набором свойств!
Навскидку такой вариант:
1) объединить массивы,
2) создать массив id и массив свойств,
3) пройти по массиву свойств - оставить индексы только уникальных элементов,
4) собрать массив уникальных элементов на основе индексов полученных в п.3 из массивов, полученных в п.2.
Выглядит это примерно так:
const arr1 = [
{id: 1, name: 'test'},
{id: 2, name: 'test2'},
{id: 3, name: 'test3'}
];
const arr2 = [
{id: 4, name: 'test4'},
{id: 5, name: 'test5'},
{id: 6, name: 'test3'}
];
const newArr = [...arr1, ...arr2];
console.log(newArr);
const idArr = newArr.map((item) => (item.id));
console.log(idArr);
const dataArr = newArr.map((item) => {
delete item.id;
return JSON.stringify(item);
});
console.log(dataArr);
uniqueIdArr = dataArr.map((item,index) => {
if (!dataArr.slice(0,index).includes(item)) return index;
}).filter(id => (id !=undefined));
console.log(uniqueIdArr);
uniqueArr = uniqueIdArr.map(id => ({id: idArr[id], ...JSON.parse(dataArr[id])}));
console.log(uniqueArr);
Если не пойдет как решение, то может какие-то идеи пригодятся.)