平行结构数据,依次查找父数据

letarr=[
{
code:'abcd',
pcode:'abc',
},
{
code:'abc',
pcode:'ab'
},
{
code:'ab',
pcode:'a'
}
]
letobj={
code:'abcd',
pcode:'abc',
}
如上所示,arr里面的数据都是有上下关系的,现在希望根据obj在arr中依次查找父级,比如obj的父应该是{code:'abc',pcode:'ab'},然后继续查找{code:'abc',pcode:'ab'}的父数据应为{code:'ab',pcode:'a'},以此类推,最后将符合条件的数据存放到一个数组里面,求一个递归的解法。
小怪兽爱吃肉
浏览 274回答 2
2回答

ABOUTYOU

从时间复杂度上来说,不建议笔者使用递归,递归隐藏问题,如内存泄漏,建议采用如下方案:functiongetParent(obj,arr){letcopyArr=[...arr];letitems=[obj];letindex=getIndex(arr,obj);while(index!==-1){items=copyArr.splice(index,1);if(items.length){index=getIndex(copyArr,items[0]);}}returnitems;}functiongetIndex(arr,obj){returnarr.findIndex((el)=>obj.pcode===el.code);}应用letarr=[{code:'abcd',pcode:'abc',},{code:'abc',pcode:'ab'},{code:'ab',pcode:'a'},{code:"a",pcode:"123"}]letobj={code:'abcd',pcode:'abc'}getParent(obj,arr);如果使用递归,建议使用楼下的递归方案。

叮当猫咪

循环获取到当前obj的父级元素,然后将父级元素作为当前元素递归下去,直到找不到父级元素为止:functiongetAllParents(obj,arr){letparent=arr.filter(item=>item.code===obj.pcode);if(parent.length){parent=parent.concat(getAllParents(parent[0],arr));}returnparent;}调用:letarr=[{code:'abcd',pcode:'abc',},{code:'abc',pcode:'ab'},{code:'ab',pcode:'a'}]letobj={code:'abcd',pcode:'abc',}console.log(getAllParents(obj,arr));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript