根据内部数组长度查找嵌套数组
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));
我目前正在处理一组嵌套数组,并尝试在满足条件(长度大于 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));