为了账号安全,请及时绑定邮箱和手机立即绑定

急求!!!!js 对树形结构数据根据某一属性进行过滤 获取新的树形结构感激不尽

急求!!!!js 对树形结构数据根据某一属性进行过滤 获取新的树形结构感激不尽

智慧大石 2019-08-21 13:10:57
需求如上现在有数据如下data=[{id:0,event:'事件1',timeLine:50,comment:'无',age:13},{id:1,event:'事件1',timeLine:100,comment:'无',age:13children:[{id:2,event:'事件2',timeLine:10,comment:'无',age:11},{id:3,event:'事件3',timeLine:90,comment:'无',age:13children:[{id:4,event:'事件4',timeLine:5,comment:'无',age:17},{id:5,event:'事件5',timeLine:10,comment:'无',age:13},{id:6,event:'事件6',timeLine:75,comment:'无',age:13children:[{id:7,event:'事件7',timeLine:50,comment:'无',age:13children:[{id:71,event:'事件71',timeLine:25,comment:'xx',age:18},{id:72,event:'事件72',timeLine:5,comment:'xx',age:13},{id:73,event:'事件73',timeLine:20,comment:'xx',age:15}]},{id:8,event:'事件8',timeLine:25,comment:'无',age:19}]}]}]}]现在希望根据age是13的属性对data进行过滤,取得新的树形结构,求一个递归方法
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

用递归写了个,人工核对了一下输出似乎没有问题。不排除在使用其他数据的时候会发生错误。反正思路在,如果有错改改应该不困难。
/**
*递归过滤节点,生成新的树结构
*@param{Node[]}nodes要过滤的节点
*@param{node=>boolean}predicate过滤条件,符合条件的节点保留
*@return过滤后的节点
*/
functiondeal(nodes,predicate){
//如果已经没有节点了,结束递归
if(!(nodes&&nodes.length)){
return[];
}
constnewChildren=[];
for(constnodeofnodes){
if(predicate(node)){
//如果节点符合条件,直接加入新的节点集
newChildren.push(node);
node.children=deal(node.children,predicate);
}else{
//如果当前节点不符合条件,递归过滤子节点,
//把符合条件的子节点提升上来,并入新节点集
newChildren.push(...deal(node.children,predicate));
}
}
returnnewChildren;
}
constresult=deal(data,node=>node.age===13);
console.log(JSON.stringify(result,null,4));
输出结果太长,用一个示意的树来表示:
/
|--0
`--1
`--3
|--5
`--6
`--7
`--72
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 1843 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号