javascript - 将数组与javascript中的嵌套数组进行比较
问题描述
我有两个数组,一个是accounts
,另一个是departments
。
要求:
-> 需要比较两个数组并需要得到过滤后的帐户数组。
-> 帐户数组是单级的,而部门数组有两级,我需要比较JobTitleID
帐户和部门的值。
-> 最后返回带有过滤数据的修改后的帐户数组。
const accounts = [
{
"AccountId": 25205,
"CandidateID": 8474,
"JobTitleID": 250
},
{
"AccountId": 25206,
"CandidateID": 8474,
"JobTitleID": 253
},
{
"AccountId": 25232,
"CandidateID": 8474,
"JobTitleID": 257
},
{
"AccountId": 25233,
"CandidateID": 8474,
"JobTitleID": 261
},
{
"AccountId": 25236,
"CandidateID": 8474,
"JobTitleID": 256
},
{
"AccountId": 25237,
"CandidateID": 8474,
"JobTitleID": 255
},
{
"AccountId": 25245,
"CandidateID": 8474,
"JobTitleID": 281
},
{
"AccountId": 25246,
"CandidateID": 8474,
"JobTitleID": 279
},
{
"AccountId": 25265,
"CandidateID": 8474,
"JobTitleID": 362
}
]
const departments = [
{
"deptName": "Production",
"jobTitles": [
{
"JobTitleID": 246,
"DepartmentID": 72,
"JobName": "Department Foreman"
},
{
"JobTitleID": 357,
"DepartmentID": 72,
"JobName": "Maintenance Supervisor"
},
{
"JobTitleID": 247,
"DepartmentID": 72,
"JobName": "Production Manager"
},
{
"JobTitleID": 362,
"DepartmentID": 72,
"JobName": "Safety & Compliance Supervisor"
}
]
},
{
"deptName": "Engineering",
"jobTitles": [
{
"JobTitleID": 250,
"DepartmentID": 73,
"JobName": "Architect"
},
{
"JobTitleID": 248,
"DepartmentID": 73,
"JobName": "CAD Operator"
},
{
"JobTitleID": 249,
"DepartmentID": 73,
"JobName": "Engineering Manager"
},
{
"JobTitleID": 251,
"DepartmentID": 73,
"JobName": "Professional Engineer"
}
]
},
{
"deptName": "Purchasing",
"jobTitles": [
{
"JobTitleID": 253,
"DepartmentID": 74,
"JobName": "Purchasing Agent"
},
{
"JobTitleID": 255,
"DepartmentID": 74,
"JobName": "Purchasing Manager"
},
{
"JobTitleID": 252,
"DepartmentID": 74,
"JobName": "Yard Foreman"
}
]
}
]
const filteredData = accounts.map(item => {
departments.map(levelOne => {
levelOne.jobTitles.map(levelTwo => {
return levelTwo.JobTitleID === item.JobTitleID
})
})
})
console.log('filteredData ', filteredData)
预期解决方案:
[
{
"AccountId": 25205,
"CandidateID": 8474,
"JobTitleID": 250
},
{
"AccountId": 25206,
"CandidateID": 8474,
"JobTitleID": 253
},
{
"AccountId": 25237,
"CandidateID": 8474,
"JobTitleID": 255
},
{
"AccountId": 25265,
"CandidateID": 8474,
"JobTitleID": 362
}
]
我尝试过的事情:
const filteredData = accounts.map(item => {
departments.map(levelOne => {
levelOne.jobTitles.map(levelTwo => {
return levelTwo.JobTitleID === item.JobTitleID
})
})
})
但我相信我的方法是完全错误的。请帮助我通过比较两个数组来实现预期的解决方案。在此先感谢。
解决方案
您可以创建数组中所有作业的departments
数组,然后使用过滤accounts
数组.some(..)
以检查特定作业是否存在于先前生成的数组中。这是一个例子:
const accounts = [
{
"AccountId": 25205,
"CandidateID": 8474,
"JobTitleID": 250
},
{
"AccountId": 25206,
"CandidateID": 8474,
"JobTitleID": 253
},
{
"AccountId": 25232,
"CandidateID": 8474,
"JobTitleID": 257
},
{
"AccountId": 25233,
"CandidateID": 8474,
"JobTitleID": 261
},
{
"AccountId": 25236,
"CandidateID": 8474,
"JobTitleID": 256
},
{
"AccountId": 25237,
"CandidateID": 8474,
"JobTitleID": 255
},
{
"AccountId": 25245,
"CandidateID": 8474,
"JobTitleID": 281
},
{
"AccountId": 25246,
"CandidateID": 8474,
"JobTitleID": 279
},
{
"AccountId": 25265,
"CandidateID": 8474,
"JobTitleID": 362
}
]
const departments = [
{
"deptName": "Production",
"jobTitles": [
{
"JobTitleID": 246,
"DepartmentID": 72,
"JobName": "Department Foreman"
},
{
"JobTitleID": 357,
"DepartmentID": 72,
"JobName": "Maintenance Supervisor"
},
{
"JobTitleID": 247,
"DepartmentID": 72,
"JobName": "Production Manager"
},
{
"JobTitleID": 362,
"DepartmentID": 72,
"JobName": "Safety & Compliance Supervisor"
}
]
},
{
"deptName": "Engineering",
"jobTitles": [
{
"JobTitleID": 250,
"DepartmentID": 73,
"JobName": "Architect"
},
{
"JobTitleID": 248,
"DepartmentID": 73,
"JobName": "CAD Operator"
},
{
"JobTitleID": 249,
"DepartmentID": 73,
"JobName": "Engineering Manager"
},
{
"JobTitleID": 251,
"DepartmentID": 73,
"JobName": "Professional Engineer"
}
]
},
{
"deptName": "Purchasing",
"jobTitles": [
{
"JobTitleID": 253,
"DepartmentID": 74,
"JobName": "Purchasing Agent"
},
{
"JobTitleID": 255,
"DepartmentID": 74,
"JobName": "Purchasing Manager"
},
{
"JobTitleID": 252,
"DepartmentID": 74,
"JobName": "Yard Foreman"
}
]
}
]
const jobs = departments.reduce((a, c) => (a.concat(c.jobTitles)), []);
const results = accounts.filter(account => jobs.some(job => job.JobTitleID === account.JobTitleID));
console.log(results);
推荐阅读
- java - spring-cloud-config:配置文件无法正常工作
- django - 如何使用 autocomplete_fields 为外键添加自动完成
- javascript - 将 id 从事件监听器传递给函数
- r - 如果没有最常见的字符串,我如何返回 NA,并将最常见的字符串(如果存在)存储在单独的列中?
- c++ - 调用传递向量的函数时编译器错误,后跟 3 个整数
- wordpress - Wordpress Docker 容器无法连接到数据库容器
- android - 使用 Firebase 对 ArrayList 进行排序
- reactjs - 升级反应后,我在控制台上收到此错误
- r - 重新编码值序列
- ios - 永久删除行(或数组项) - swift 3/4