美文网首页
给树结构的某个层级及以下添加isDisabled字段

给树结构的某个层级及以下添加isDisabled字段

作者: 前端青音 | 来源:发表于2019-11-12 14:47 被阅读0次

需求

判断当前的节点属于树的哪一个层级,将当前层级及其以下的全部置灰。比如当前层级为第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
      }
    ]

相关文章

网友评论

      本文标题:给树结构的某个层级及以下添加isDisabled字段

      本文链接:https://www.haomeiwen.com/subject/ebtqictx.html