问题:多维数组根据某个字段来筛选,返回原有得数组,children length为0 整个子对象去除。
注意:返回得是原数组,如果需要返回数组内符合得对象,这个比较简单,这里就不说了
- 声明一个数组
这是一个三维数组,根据最底部得数据得isDo来过滤
let arrss = [{
name: "aa",
children: [{
name: "aa-aa",
children: [{
isDo: false,
name: "aa-aa-aa",
},
{
isDo: true,
name: "aa-aa-bb",
},
{
isDo: true,
name: "aa-aa-cc",
},
{
isDo: false,
name: "aa-aa-dd",
},
]
}, {
name: "aa-aa",
children: [{
isDo: false,
name: "aa-aa-aa",
},
{
isDo: false,
name: "aa-aa-bb",
},
{
isDo: false,
name: "aa-aa-cc",
},
{
isDo: true,
name: "aa-aa-dd",
},
]
}]
}, {
name: "bb",
children: [{
name: "bb-aa",
children: [{
isDo: false,
name: "bb-aa-aa",
},
{
isDo: false,
name: "bb-aa-bb",
},
{
isDo: true,
name: "bb-aa-cc",
},
{
isDo: false,
name: "bb-aa-dd",
},
]
}]
}, {
name: "bb",
children: [{
name: "bb-aa",
children: [{
isDo: false,
name: "bb-aa-aa",
},
{
isDo: false,
name: "bb-aa-bb",
},
{
isDo: false,
name: "bb-aa-cc",
},
{
isDo: false,
name: "bb-aa-dd",
},
]
}]
}]
- 方法参数:
list, 传入要处理得数组
key, 过滤得字段
num, 递归时父级当前处理得Index
prevList 父级list
function ddd(list, key, num, prevList) {
for (let i = list.length - 1; i >= 0; i--) {
let item = list[i]
if (item.children && Array.isArray(item.children) && item.children.length > 0) {
ddd(item.children, key, i, list);
} else {
if (!item[key]) {
list.splice(i, 1)
}
}
}
if (Array.isArray(list) && list.length == 0) {
prevList.splice(num, 1)
}
}
ddd(arrss, 'isDo')
console.log(arrss);
结果