Сравните два сложных объекта и удалите дубликаты данных

#javascript

Вопрос:

У меня есть сложный тип FinalAnomalyStandardsDatatable :

 export interface AnomalyStandardsDatatable {
  target?: string;
  msg?: string;
}

export interface FinalAnomalyStandardsDatatable {
  projectTitle?: string;
  targetObjects?: AnomalyStandardsDatatable[];
}

let listOfA: FinalAnomalyStandardsDatatable[] = [];
let listOfB: FinalAnomalyStandardsDatatable[] = [];

let anomalieProjectsA: AnomalyStandardsDatatable[] = [];
anomalieProjects.push({ target: '9999', msg: 'yo' });
anomalieProjects.push({ target: '8888', msg: 'waz' });
anomalieProjects.push({ target: '7777', msg: 'zup' });

listOfA.push({ projectTitle: 'P1', targetObjects: anomalieProjectsA });
listOfA.push({ projectTitle: 'P2', targetObjects: anomalieProjectsA });

let anomalieProjectsB: AnomalyStandardsDatatable[] = [];
anomalieProjects.push({ target: '9999', msg: 'yo' });

listOfB.push({ projectTitle: 'P1', targetObjects: anomalieProjectsB });
 

Я хотел бы удалить из listOfA дублирующуюся запись из listOfB, у которой один и тот же заголовок проекта и только одна цель.

Большое спасибо !

Ответ №1:

Это map() / filter() комбинация должно сделать свое дело.

 newListOfA = listOfA.filter(obj => {
      return listOfB.filter(objB => objB.projectTitle.trim() == obj.projectTitle.trim() amp;amp; objB.targetObjects.join(",") == obj.targetObjects.join(",")).length === 0
    })
 
 let listOfA = [];
let listOfB = [];

let anomalieProjects = [];
let anomalieProjectsA = [];
anomalieProjects.push({
  target: '9999',
  msg: 'yo'
});
anomalieProjects.push({
  target: '8888',
  msg: 'waz'
});
anomalieProjects.push({
  target: '7777',
  msg: 'zup'
});

listOfA.push({
  projectTitle: 'P1',
  targetObjects: anomalieProjectsA
});
listOfA.push({
  projectTitle: 'P2',
  targetObjects: anomalieProjects
});

let anomalieProjectsB = [];
listOfB.push({
  projectTitle: 'P1',
  targetObjects: anomalieProjectsB
});

newListOfA = listOfA.filter(obj => {
  return listOfB.filter(objB => objB.projectTitle.trim() == obj.projectTitle.trim() amp;amp; objB.targetObjects.join(",") == obj.targetObjects.join(",")).length === 0
})

console.log(newListOfA) 

Комментарии:

1. Спасибо вам за вашу помощь ! Это действительно хорошо работает !