let a = [
{
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}}
]
}
];
let parent = (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);
}
});
};
let obj = {key: 15, title: '一级-0-1', parentKey: 10, status: {choose: false}};
parent(a, obj);
console.log(a);
可是执行结果下来 就只有key 10 修改到了 循环上去 理应 key 1 的choose 为true啊 目前只有 key 修改到了!看了好半会。没理解到为啥不执行上去!
问题在
parent(data, item)
这句。每次递归,
data
是什么呢?你只往下找了,没把父级传进去呀。这种已经告诉你
parentKey
的,直接把层级打平,直接找不就好了。如果不使用
parentKey
也可以从上往下,用一个变量记录路径就好了。如果使用递归,那么递归要有返回值判断是否找到,也是可以的。或者转成字符串用正则也可以。