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

萌新求教!平行结构数据的一些处理

萌新求教!平行结构数据的一些处理

慕森王 2019-06-09 09:01:16
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'},以此类推,最后将符合条件的数据存放到一个数组里面,求一个递归的解法。
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

从时间复杂度上来说,不建议笔者使用递归,递归隐藏问题,如内存泄漏,建议采用如下方案:
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);
如果使用递归,建议使用楼下的递归方案。
                            
查看完整回答
反对 回复 2019-06-09
?
慕村9548890

TA贡献1884条经验 获得超4个赞

循环获取到当前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));
                            
查看完整回答
反对 回复 2019-06-09
  • 2 回答
  • 0 关注
  • 335 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信