使用属性过滤两个json数组

San*_*osh 0 javascript arrays

如果使用类型script/javascript在第二个数组中存在相同的对象,我必须过滤第一个数组

这是我的阵列

var students = [{id: 1, name : 'SSS'},
{id: 2, name : 'SSa'},
{id: 3, name : 'SSb'},
{id: 4, name : 'SSc'},
{id: 5, name : 'SSd'}];

var emp = [{id: 1, name : 'SSS'},
{id: 4, name : 'SSc'},
{id: 5, name : 'SSd'}];
Run Code Online (Sandbox Code Playgroud)

输出应该是

var finalarr = [{id: 2, name : 'SSa'},
{id: 3, name : 'SSb'}]
Run Code Online (Sandbox Code Playgroud)

我在下面试过,但产生错误的输出

for (let i = 0; i < students.length; i++) {
    for (let j = 0; j < emp.length; j++) {
    if (students[i].id != emp[j].id) {
    finalarr.push(students[i]);
    }
}
}
console.log(finalarr);
Run Code Online (Sandbox Code Playgroud)

//下面是我的实际应用程序代码

this.appointmentTypes.filter((data, index) => this.typesData.includes(this.typesData[index].appointmentType.id))
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 5

对象是对内存位置的引用 - ===除非它们引用相同的内存位置,否则它们将永远不会相互引用,因此includes无法工作.迭代整个数组并测试名称和ID:

var students=[{id:1,name:'SSS'},{id:2,name:'SSa'},{id:3,name:'SSb'},{id:4,name:'SSc'},{id:5,name:'SSd'}]
var emp=[{id:1,name:'SSS'},{id:4,name:'SSc'},{id:5,name:'SSd'}]

const finalArr = students.filter(({ id, name }) =>
  !emp.some(exclude => exclude.id === id && exclude.name === name)
);
console.log(finalArr);
Run Code Online (Sandbox Code Playgroud)