树形结构数据如下:
const treeData = [{
title: '食品',
name: '食品',
key: '0-0',
level: 0,
type:'null',
children: [
{
title: '饼干',
name: '饼干',
key: '0-0-0',
level: 1,
type:'null',
children: [
{ title: '奥利奥', name:'奥利奥',key: '0-0-0-0',level:2,type:'hard',children:[{......}]},
{ title: '达能', name:'达能',key: '0-0-0-1',level:2,type:'soft' ,children:[{......}]},
{ title: '优冠', name:'优冠',key: '0-0-0-2' ,level:2,type:'soft',children:[{......}]},
],
},
{
title: '糖果',
name: '糖果',
key: '0-0-1',
level: 1,
type:'null',
children: [
{ title: '0-0-1-0', name:'徐福记',key: '0-0-1-0' ,level:2,type:'hard',children:[{......}]},
{ title: '0-0-1-1', name:'QQ糖',key: '0-0-1-1' ,level:2,type:'soft',children:[{......}]},
{ title: '0-0-1-2', name:'悠哈',key: '0-0-1-2' ,level:2,type:'hard',children:[{......}]},
],
}
],
}];
如上述数据所示,数据层级不确定,可能有很多层。我想只遍历到level=2的这一层,并筛选出type='hard'的部分,type='soft'的部分以及其children全部省去,也就是说,处理之后数据变成这样:
const treeData = [{
title: '食品',
name: '食品',
key: '0-0',
level: 0,
type:'null',
children: [
{
title: '饼干',
name: '饼干',
key: '0-0-0',
level: 1,
type:'null',
children: [
{ title: '奥利奥', name:'奥利奥',key: '0-0-0-0',level:2,type:'hard',children:[{......}]},
],
},
{
title: '糖果',
name: '糖果',
key: '0-0-1',
level: 1,
type:'null',
children: [
{ title: '0-0-1-0', name:'徐福记',key: '0-0-1-0' ,level:2,type:'hard',children:[{......}]},
{ title: '0-0-1-2', name:'悠哈',key: '0-0-1-2' ,level:2,type:'hard',children:[{......}]},
],
}
],
}];
请问这个该怎么处理呢?
###function filterNodes (nodes = [], callbackfn) {
const result = [];
for (const node of nodes) {
if (callbackfn(node)) {
const children = filterNodes(node.children, callbackfn);
result.push({ ...node, children });
}
}
return result;
}
const filteredNodes = filterNodes(
treeData,
node => 2 >= node.level && "soft" !== node.type,
);
###
function customFilter(tree, filter = {level: 2, type: 'hard'}) {
return tree.filter(item => item.level !== filter.level || item.type === filter.type).map(item => {
item.children && ( item.children = customFilter(item.children, filter));
return item;
});
}
customFilter(treeData);
ps: 递规不熟, 看效果好像是能符合要求