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){//改为trueitem.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修改到了!看了好半会。没理解到为啥不执行上去!
2 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
问题在parent(data,item)这句。每次递归,data是什么呢?你只往下找了,没把父级传进去呀。这种已经告诉你parentKey的,直接把层级打平,直接找不就好了。如果不使用parentKey也可以从上往下,用一个变量记录路径就好了。如果使用递归,那么递归要有返回值判断是否找到,也是可以的。或者转成字符串用正则也可以。
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
当确定有子集有查找项时,父级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);
添加回答
举报
0/150
提交
取消