需求
判断当前的节点属于树的哪一个层级,将当前层级及其以下的全部置灰。比如当前层级为第5层,level= 5,我们需要将树结构中所有层级 大于5(层级越深,数字越大)的节点添加上置灰标识 isDisabled = true。.
image.png
代码
/**
* @param {literal Array *} oldArr 最初始完整的树结构
* @param {literal Number *} orgId 当前节点的id
* @param {literal Array *} arr 每次循环时,真正操作的数组
* @param {literal Number *} level 查询arr中的id后,返回的对应的树节点
*/
addIsDisabled2(oldArr, orgId, arr = [], level = 0) {
// 第一次遍历
if (!arr.length) {
arr = oldArr
}
for (let i = 0; i < arr.length; i++) {
// 查找orgId所在的层级,查找到后,重新遍历一次完整的树结构,防止 找到层级之前的节点未判断赋值
if (!level && Number(arr[i].org_id) === Number(orgId)) {
level = arr[i].level
arr[i].isDisabled = true
this.addIsDisabled2(oldArr, orgId, oldArr, level)
}
// 如果找到orgId所在的层级,将大于该层级的添加isDisabled属性
if (level && Number(arr[i].level) >= Number(level)) {
arr[i].isDisabled = true
}
// 查找项有子集,继续递归遍历
if (arr[i].children && arr[i].children.length) {
this.addIsDisabled2(oldArr, orgId, arr[i].children, level)
}
}
return arr
}
console.log('hhhhh:', this.addIsDisabled2(dataArr, 141)) // 传入树结构 数组,节点id
数据结构
image.png
let dataArr = [
{
children: [
{
children: [],
is_default: 0,
level: 1,
org_id: 123,
org_title: '22223f',
parent_id: 113,
person_num: 0
},
{
children: [
{
children: [
{
children: [
{
children: [
{
is_default: 0,
level: 5,
org_id: 183,
org_title: '1',
parent_id: 142,
person_num: 0
}
],
is_default: 0,
level: 4,
org_id: 142,
org_title: '213335ggg',
parent_id: 141,
person_num: 1
}
],
is_default: 0,
level: 3,
org_id: 141,
org_title: '213335yyygkhj',
parent_id: 174,
person_num: 1
}
],
is_default: 0,
level: 2,
org_id: 174,
org_title: '56666gk',
parent_id: 133,
person_num: 1
},
{
children: [
{
children: [],
is_default: 0,
level: 3,
org_id: 200,
org_title: '8888888',
parent_id: 199,
person_num: 0
}
],
is_default: 0,
level: 2,
org_id: 199,
org_title: '77777777777',
parent_id: 133,
person_num: 0
}
],
is_default: 0,
level: 1,
org_id: 133,
org_title: '122221ff9jkkk',
parent_id: 113,
person_num: 1
},
{
children: [
{
children: [],
is_default: 0,
level: 2,
org_id: 238,
org_title: 'test22',
parent_id: 218,
person_num: 0
}
],
is_default: 0,
level: 1,
org_id: 218,
org_title: 'test2',
parent_id: 113,
person_num: 0
},
{
children: [],
is_default: 0,
level: 1,
org_id: 231,
org_title: 'test3',
parent_id: 113,
person_num: 0
}
],
is_default: 1,
level: 0,
org_id: 113,
org_title: '测试的团队',
parent_id: 0,
person_num: 2
}
]
运行结果
可以看到,节点id 为141的level为3,并且已经给level>=3的节点都加上isDisabled属性。
hhhhh: [
{
children: [
{
children: [],
is_default: 0,
level: 1,
org_id: 123,
org_title: '22223f',
parent_id: 113,
person_num: 0
},
{
children: [
{
children: [
{
children: [
{
children: [
{
is_default: 0,
level: 5,
org_id: 183,
org_title: '1',
parent_id: 142,
person_num: 0,
isDisabled: true
}
],
is_default: 0,
level: 4,
org_id: 142,
org_title: '213335ggg',
parent_id: 141,
person_num: 1,
isDisabled: true
}
],
is_default: 0,
level: 3,
org_id: 141,
org_title: '213335yyygkhj',
parent_id: 174,
person_num: 1,
isDisabled: true
}
],
is_default: 0,
level: 2,
org_id: 174,
org_title: '56666gk',
parent_id: 133,
person_num: 1
},
{
children: [
{
children: [],
is_default: 0,
level: 3,
org_id: 200,
org_title: '8888888',
parent_id: 199,
person_num: 0,
isDisabled: true
}
],
is_default: 0,
level: 2,
org_id: 199,
org_title: '77777777777',
parent_id: 133,
person_num: 0
}
],
is_default: 0,
level: 1,
org_id: 133,
org_title: '122221ff9jkkk',
parent_id: 113,
person_num: 1
},
{
children: [
{
children: [],
is_default: 0,
level: 2,
org_id: 238,
org_title: 'test22',
parent_id: 218,
person_num: 0
}
],
is_default: 0,
level: 1,
org_id: 218,
org_title: 'test2',
parent_id: 113,
person_num: 0
},
{
children: [],
is_default: 0,
level: 1,
org_id: 231,
org_title: 'test3',
parent_id: 113,
person_num: 0
}
],
is_default: 1,
level: 0,
org_id: 113,
org_title: '测试的团队',
parent_id: 0,
person_num: 2
}
]