项目中我们常会遇到对树状结构的数据进行(递归、过滤、筛选)等操作,递归网上有很多相应的例子,今天遇到一个过滤+筛选这样一个功能,但是在网上大概看了一下没有找到合适的例子,因此自己写一个,也记录一下
代码板块:
const data = [
{
label: "一级 1",
children: [
{
label: "二级 1-1",
children: [
{
label: "三级 1-1-1",
},
],
},
],
},
{
label: "一级 2",
children: [
{
label: "二级 2-2",
children: [
{
label: "三级 2-2-3",
},
],
},
{
label: "二级 2-2",
children: [
{
label: "三级 2-2-4",
},
],
},
],
},
{
label: "一级 3",
children: [
{
label: "二级 3-2",
children: [
{
label: "三级 2-2-1",
},
],
},
],
},
];
const fn = (node, filter) => {
let res = false;
if (filter(node)) {
res = true;
} else if (node.children instanceof Array) {
const _data = node.children.filter((node) =>
fn(node, filter)
);
node.children = _data;
if(node.children.length>0){
res = true;
}
}
return res;
};
console.log(
data.filter((node) =>
fn(node, (node) => {
return ["三级 2-2-1", "三级 2-2-3"].indexOf(node.label) >= 0;
})
)
);