当前位置: 首页 > Web前端 > JavaScript

【题目】从扁平化数据结构到Tree

时间:2023-03-26 21:59:17 JavaScript

面试了十几个高级前端,连具体题目都写不出来(从扁平化数据结构到Tree)。我真的没有写过。有趣的。早上看到了,做了笔迹记录。像这样展平数据:letarr=[{id:1,name:'Department1',pid:0},{id:2,name:'Department2',pid:1},{id:3,name:'部门3',pid:1},{id:4,name:'部门4',pid:3},{id:5,name:'部门5',pid:4},]输出结果如下接下来,无限级别树:[{"id":1,"name":"部门1","pid":0,"children":[{"id":2,"name":"部门2","pid":1,"children":[]},{"id":3,"name":"部门3","pid":1,"children":[//结果,,,]}]}]self书面答题方法constflap2Tree=(flapArr)=>{//根据pid递归寻找parentconstfindByPid=(pid,data)=>{for(leti=0;i{letmyParent=findByPid(t.pid,afterArr);if(myParent){myParent.children||(myParent.children=[]);//初始化myParent.children.push(t);}else{resTree.push(t);}})returnresTree;}flap2Tree(arr);学习博主最佳性能方法functionarrayToTree(items){constresult=[];//存储释放结果集constitemMap={};//for(constitemofitems){constid=item.id;constpid=item.pid;if(!itemMap[id]){itemMap[id]={children:[],}}itemMap[id]={...item,children:itemMap[id]['children']}consttreeItem=itemMap[ID];如果(pid===0){result.push(treeItem);}else{if(!itemMap[pid]){itemMap[pid]={children:[],}}itemMap[pid].children.push(treeItem)}}返回结果;}