首页 > 解决方案 > 如何比较两个具有不同属性名称的不同数组并在javascript中删除不匹配的数组?

问题描述

我有两个具有不同属性名称的不同数组,如下所示

arrayA = [
    { id: 20, name: 'Jason' },
    { id: 15, name: 'Harry' },
    { id: 5, name: 'Clara' },
    { id: 9, name: 'Melonie' }
]

arrayB = [
    { courseID: 12, studentID: 20 },
    { courseID: 12, studentID: 15 }
]

我想比较这两个不同的数组并从中删除不匹配的 id arrayA。为了比较,id领域arrayAstudentID领域arrayB。如果这些文件不相等,则应将它们从arrayA.

预期低于

arrayA = [{id: 20, name: 'Jason' }, { id: 15, name: 'Harry' }]

这是我在下面尝试但没有奏效的方法。给了我空数组。

filteredElements = this.arrayA.map(e => e.id).filter(
    val => this.arrayB.indexOf(val.studentID) !== -1
);

标签: javascript

解决方案


您可以通过以下步骤执行此操作:

  • 使用map()onarrayB并创建courseID.
  • Set()然后从中创建一个Array
  • 然后使用filter() arrayA并检查上面创建的对象是否id存在SetSet.prototype.has()

const arrayA = [{id:20,name:'Jason'},{id:15,name:'Harry'},{id:5,name:'Clara'},{id:9,name:'Melonie'}]
const arrayB =[{courseID:12,studentID:20},{courseID:12,studentID:15}];
const ids = new Set(arrayB.map(x => x.studentID));
const res = arrayA.filter(x => ids.has(x.id));
console.log(res);


推荐阅读