比较两个复杂对象并删除重复数据

时间:2021-06-03 06:49:08

标签: 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 中具有相同 projectTitle 和相同 目标的重复条目 仅。

非常感谢!

1 个答案:

答案 0 :(得分:1)

这个 map()/filter() 组合应该可以解决问题。

newListOfA = listOfA.filter(obj => {
      return listOfB.filter(objB => objB.projectTitle.trim() == obj.projectTitle.trim() && 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() && objB.targetObjects.join(",") == obj.targetObjects.join(",")).length === 0
})

console.log(newListOfA)