#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)));
Ответ №1:
Попробуйте это:
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)
Ответ №2:
Вы можете попробовать это
const result = modules.filter(module =>
elements.every(el =>
module.assignClasses.some(item => item.class.classId === el)));
console.log(result);