javascript - 如何比较两个具有不同属性名称的不同数组并在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
领域arrayA
和studentID
领域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
);
解决方案
您可以通过以下步骤执行此操作:
- 使用
map()
onarrayB
并创建courseID
. Set()
然后从中创建一个Array
- 然后使用
filter()
arrayA
并检查上面创建的对象是否id
存在Set
Set.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);
推荐阅读
- javascript - 带表单的 Select2 很慢
- javascript - PHP 和 Ajax:使用 post ajax 返回错误
- python - 如何将具有坐标和频率的字典转换为矩阵?
- flutter - 如何在颤动中使用 DateFormat 选择出生日期?
- javascript - 从对象形成数据集
- python-2.7 - AWS Lambda 函数按标签调整实例大小
- python - python selenium chrome cookie 数据库为空
- node.js - Mongoose 分页速度太慢,无法查询数百条记录
- javascript - 谷歌标签管理器没有在子域上触发
- java - 使用 POI 麻烦将 DOCX 转换为 PDF