UPD: перечитал комментарии к вопросу, не обратил внимание что объекты имеют одинаковые поля. Решение оставлю как есть, может кому-то будет полезным
Возьмем входные данные из вопроса
const firstArray = [
{
title: 'Повтряюший текст',
price: 'Price'
},
{
title: 'Title2',
price: 'Price'
}
]
const secondArray = [
{
title: 'Повтряюший текст',
price: 'Price'
},
{
title: 'Title3',
price: 'Price'
}
]
Вся сложность в том, что нужно убрать дублирующиеся объекты. Но проверять нужно не их ссылки, а поля. Алгоритм следующий - необходимо проверять каждый новый объект, не находится ли уже объект с такими же полями в массиве:
const isEqual = (firstObj, secondObj) => {
const firstObjKeys = Object.keys(firstObj);
const secondObjKeys = Object.keys(secondObj);
// Если объекты имеют разное кол-во ключей - они различны
if (firstObjKeys.length !== secondObjKeys.length) return false;
// Проходимся по всем ключам
for (const key of firstObjKeys) {
// Необходимо проверять на наличие ключа, в случае если значение окажется undefined
const secondObjHasKey = key in secondObj;
// Проверка самого значения
const valueIsSame = firstObj[key] === secondObj[key];
if (!secondObjHasKey || !valueIsSame) return false;
}
return true;
}
const array = [...firstArray, ...secondArray];
const result = [];
// Проходимся по объектам массива со всеми значениями
for (const obj of array) {
// Проверяем каждый элемент на дубликат. Если хоть один дубликат найден - мы его не добавляем
const isDuplicate = result.some(item => isEqual(obj, item));
if (!isDuplicate) result.push(obj);
}
Важное замечание: код будет работать только с примитивами. Т.е. в случаях со вложенными объектами и не только результат будет неверен. Так же могут быть неожиданные результаты, если объекты в массивах были наследованы, но судя по примеру - это не ваш случай.