根据内部数组长度查找嵌套数组

Find nested arrays based on inner array length

我目前正在处理一组嵌套数组,并尝试在满足条件(长度大于 1)的情况下提取某些数组。这是数组 -

const testArr = [
  {
    "type": 1,
    "categories": [
      {
        "description": "Foo",
        "subOptions": [
          {
            "subType": 1,
            "subTypeTypeDescription": "Bar"
          }
        ],
      }
    ]
  },
  {
    "type": 2,
    "categories": [
      {
        "description": "Baz",
        "subOptions": [
          {
            "subType": 2,
            "subTypeTypeDescription": "Baf"
          },
          {
            "subType": 3,
            "subTypeTypeDescription": "Bee"
          }
        ],
      }
    ]
  }
]

我希望生成的是一个类别数组,但前提是这些类别有一个长度 > 1 的 subOptions 数组。这是上面数组的希望结果 -

[
  {
    "description": "Baz",
    "subOptions": [
      {
        "subType": 2,
        "subTypeTypeDescription": "Baf"
      },
      {
        "subType": 3,
        "subTypeTypeDescription": "Bee"
      }
    ],
  }
]

我可以像这样使用普通的 foreach 循环让它工作 -

  let categories: [];

  testArr.forEach((service) => {
    service.categories.forEach((cat) => {
        if(cat.subOptions.length > 1) {
          categories.push(cat)
        }
    })
  })

但我正在努力学习如何使用功能性工具来完成这些事情。我已经尝试过多次混合映射、过滤和减少并不断失败。如果有人能就使用函数式方法做同样事情的最佳方式提供一些指导,我将不胜感激。

使用 .filter 检查 sub-array 的长度:

const testArr=[{type:1,categories:[{description:"Foo",subOptions:[{subType:1,subTypeTypeDescription:"Bar"}]}]},{type:2,categories:[{description:"Baz",subOptions:[{subType:2,subTypeTypeDescription:"Baf"},{subType:3,subTypeTypeDescription:"Bee"}]}]}];

const result = testArr
  .flatMap(item => item.categories)
  .filter(({ subOptions }) => subOptions.length >= 2);
console.log(result);

试试这个

  const categories = testArr.map(service => {
    return service.categories.filter(category => category.subOptions.length > 1);
  })

或者甚至是一行:

const categories = testArr.map(service => service.categories.filter(category => category.subOptions.length > 1));