typescript - 打字稿:过滤包含另一个数组的每个元素的数组
问题描述
我有下面的数组,数组中的每个模块都分配了许多类
const modules = [
{
"moduleId":"AN-01",
"assignClasses":[
{
"class":{
"classId":"1GC1"
}
},
{
"class":{
"classId":"1A1"
}
},
{
"class":{
"classId":"1EM1"
}
}
]
},
{
"moduleId":"CC-01",
"assignClasses":[
{
"class":{
"classId":"1A1"
}
},
{
"class":{
"classId":"1EM1"
}
}
]
},
{
"moduleId":"CH-01",
"assignClasses":[
{
"class":{
"classId":"1GC1"
}
},
{
"class":{
"classId":"1EM1"
}
}
]
}
]
我想过滤包含元素数组中所有项目的上述模块数组。
const elements = ["1GC1", "1EM1"];
我尝试使用下面的代码,但我只得到模块 CH-01,尽管它必须返回模块 AN-01 和 CH-01。
let data = modules.filter(module => module.assignClasses.every(assign => elements.some(item => item == assign.class.classId)));
解决方案
尝试这个:
const modules = [
{
"moduleId":"AN-01",
"assignClasses":[
{
"class":{
"classId":"1GC1"
}
},
{
"class":{
"classId":"1A1"
}
},
{
"class":{
"classId":"1EM1"
}
}
]
},
{
"moduleId":"CC-01",
"assignClasses":[
{
"class":{
"classId":"1A1"
}
},
{
"class":{
"classId":"1EM1"
}
}
]
},
{
"moduleId":"CH-01",
"assignClasses":[
{
"class":{
"classId":"1GC1"
}
},
{
"class":{
"classId":"1EM1"
}
}
]
}
]
const elements = ["1GC1", "1EM1"];
let data = modules.filter(module => {
const moduleClasses = module.assignClasses.map(assign => assign.class.classId)
return elements.every(e => moduleClasses.includes(e))
})
console.log(data)
推荐阅读
- filtering - DAX - 具有多个表和列的多个过滤器
- reactjs - Redux saga 不获取到 api
- imagesharp - 使用 Image Sharp 保存两种颜色索引 (1bpp) PNG
- postgresql - PostgreSQL 中的动态作业调度程序或计时器
- owl - 关于描述逻辑和 OWL 的澄清请求
- c - 从文件扫描生成二叉树
- java - Spring Boot嵌入式tomcat ServerProperties bean不起作用
- apache-kafka - 无法删除 cloudera 中的默认 kafka 配置
- git - 保存 git log 文件(带有标签,因为它们丢失了)
- javascript - 延迟javascript循环延迟