首页 > 解决方案 > 打字稿:过滤包含另一个数组的每个元素的数组

问题描述

我有下面的数组,数组中的每个模块都分配了许多类

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)));

标签: 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"];

let data = modules.filter(module => {
  const moduleClasses = module.assignClasses.map(assign => assign.class.classId)
  return elements.every(e => moduleClasses.includes(e))
}) 

console.log(data)


推荐阅读