Найти ошибку в коде, добавление в существующий массив
буду благодарен за помощь в решении не большой задачи и чтоб кто-то объяснил что я делаю не так .
Дана задача :
Нужно сохранить объект в модель, перед этим проверив нет ли в модели уже такого объекта с таким ID.
Если нет , то просто добавить в модель.
Если есть , то взять из нового объекта который мы хотим добавить в модель, массив "Получатели" и добавить людей из этого массива в существующий в модели объект, а именно его массив "Получатели", но добавить нужно только только тех людей которых ещё нет в массиве, то есть уникальных, чтоб нельзя было добавить одного получателя 2 раза.
моё решение задачи :
//Модель
let rows = [];
//Добавим объект в модель для тестирования
rows.push(
{
'Отправитель' : {
id: "00000001",
name: "Андрей"
},
'Получатели' : [
{
id: "00000002",
name: "Анна"
},
{
id: "00000003",
name: "Иван"
},
{
id: "00000004",
name: "Сергей"
}
]
}
);
//Объект который мы хотим добавить в модель.Но он уже к примеру есть в модели.
let newObj = {
'Отправитель' : {
id: "00000001",
name: "Андрей"
},
'Получатели' : [
{
id: "00000003",
name: "Иван"
},
{
id: "00000005",
name: "Светлана"
},
{
id: "00000004",
name: "Сергей"
},
{
id: "00000006",
name: "Татьяна"
}
]
};
//мой код, проверю есть ли в масиве уже объект с таким ID,
//если есть добавлю получателей в существующий обьект.
if ( rows.some((obj)=> obj['Отправитель'].id === newObj['Отправитель'].id) ){
//Сначала найду нужный мне обьект в модели, в модели.
let exist = rows.find((v)=> v['Отправитель'].id === newObj['Отправитель'].id);
console.log('exist ::: ',exist);
//набор уникальных получателей которых нет в существующем объекте внутри масива exist['Получатели'].
let unique = [];
exist['Получатели'].forEach(function (prev){
newObj['Получатели'].forEach(function (curr){
if ( curr.id !== prev.id ){
if ( !unique.some((v)=>v.id === curr.id) ){
unique.push(curr);
}
}
});
});
console.log('unique::: ',unique);
Array.prototype.push.apply(exist['Получатели'],unique);
}else{
//Если обьекта с таким ID нет в модели и он действительно новый
rows.push(newObj);
}
Ожидаемый результат:
rows = [
{
'Отправитель' : {
id: "00000001",
name: "Андрей"
},
'Получатели' : [
{
id: "00000002",
name: "Анна"
},
{
id: "00000003",
name: "Иван"
},
{
id: "00000004",
name: "Сергей"
},
{
id: "00000005",
name: "Светлана"
},
{
id: "00000006",
name: "Татьяна"
}
]
}
];
Результат который получаю
rows = [
{
'Отправитель' : {
id: "00000001",
name: "Андрей"
},
'Получатели' : [
{
id: "00000002",
name: "Анна"
},
{
id: "00000003",
name: "Иван"
},
{
id: "00000004",
name: "Сергей"
},
{
id: "00000003",
name: "Иван"
},
{
id: "00000005",
name: "Светлана"
},
{
id: "00000004",
name: "Сергей"
},
{
id: "00000006",
name: "Татьяна"
}
]
}
];
Сортировка не обязательна, просто нужно чтоб массив содержал только уникальных получателей , чтоб их ID не повторялись.
Предполагаю чтоб проверить все возможные дубли мне надо итерировать 2 объекта паралельно.