有没有人遇到过这个问题哈!js 树第归向上找父级修改数据 怎么只能改到一层呢!

leta=[
{
key:1,
title:'一级',
parentKey:0,
status:{choose:false},
children:[
{
key:10,title:'一级-0',parentKey:1,status:{choose:false},children:[
{key:15,title:'一级-0-1',parentKey:10,status:{choose:false}}
]
},
{key:11,title:'一级-1',parentKey:1,status:{choose:false}},
{key:12,title:'一级-2',parentKey:1,status:{choose:false}},
{key:13,title:'一级-3',parentKey:1,status:{choose:false}},
{key:14,title:'一级-4',parentKey:1,status:{choose:false}}
]
}
];
letparent=(data,obj)=>{
data.forEach(item=>{
if(item.key===obj.parentKey){
//改为true
item.status.choose=true;
parent(data,item);
}
if(item.children&&item.children.length){
parent(item.children,obj);
}
});
};
letobj={key:15,title:'一级-0-1',parentKey:10,status:{choose:false}};
parent(a,obj);
console.log(a);
可是执行结果下来就只有key10修改到了循环上去理应key1的choose为true啊目前只有key修改到了!看了好半会。没理解到为啥不执行上去!
aluckdog
浏览 203回答 2
2回答

有只小跳蛙

问题在parent(data,item)这句。每次递归,data是什么呢?你只往下找了,没把父级传进去呀。这种已经告诉你parentKey的,直接把层级打平,直接找不就好了。如果不使用parentKey也可以从上往下,用一个变量记录路径就好了。如果使用递归,那么递归要有返回值判断是否找到,也是可以的。或者转成字符串用正则也可以。

翻过高山走不出你

当确定有子集有查找项时,父级key修改为trueleta=[{key:1,title:'一级',parentKey:0,status:{choose:false},children:[{key:10,title:'一级-0',parentKey:1,status:{choose:false},children:[{key:15,title:'一级-0-1',parentKey:10,status:{choose:false}}]},{key:11,title:'一级-1',parentKey:1,status:{choose:false}},{key:12,title:'一级-2',parentKey:1,status:{choose:false}},{key:13,title:'一级-3',parentKey:1,status:{choose:false}},{key:14,title:'一级-4',parentKey:1,status:{choose:false}}]}];letparent=(data,obj)=>{data.forEach(item=>{if(item.key===obj.parentKey){//改为truedata.key.choose=true//当确定有子集有查找项时,父级key修改为trueitem.status.choose=true;parent(data,item);}if(item.children&&item.children.length){item.status.choose=true;//当确定有子集parent(item.children,obj);}});};letobj={key:15,title:'一级-0-1',parentKey:10,status:{choose:false}};parent(a,obj);console.log(a);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript