树状结构-根据节点id获取节点

2019-11-08  本文已影响0人  前端青音

需求

希望通过一个以节点id组成的数组来查询树结构,并且返回对应节点id对应的节点。

数据结构

let testArr = [
              {
                children: [
                  {
                    children: [],
                    is_default: 1,
                    level: 1,
                    org_id: 2,
                    org_title: '未分组',
                    parent_id: 1,
                    person_num: 0
                  },
                  {
                    children: [
                      {
                        is_default: 0,
                        level: 2,
                        org_id: 4,
                        org_title: '后端组',
                        parent_id: 3,
                        person_num: 0
                      },
                      {
                        children: [
                          {
                            children: [
                              {
                                children: [],
                                is_default: 0,
                                level: 4,
                                org_id: 54,
                                org_title: '测试',
                                parent_id: 10,
                                person_num: 0
                              }
                            ],
                            is_default: 0,
                            level: 3,
                            org_id: 10,
                            org_title: '部门名称2333',
                            parent_id: 8,
                            person_num: 0
                          }
                        ],
                        is_default: 0,
                        level: 2,
                        org_id: 8,
                        org_title: '运维组',
                        parent_id: 3,
                        person_num: 0
                      }
                    ],
                    is_default: 0,
                    level: 1,
                    org_id: 3,
                    org_title: '技术部',
                    parent_id: 1,
                    person_num: 0
                  }
                ],
                is_default: 1,
                level: 0,
                org_id: 1,
                org_title: '测试根节点',
                parent_id: 0,
                person_num: 0
              }
            ]

函数

    /**
     * @param {literal Object *} arr 待查询的id数组
     * @param {literal Array *} data 树结构数据
     * @param {literal Array *} dep 查询arr中的id后,返回的对应的树节点
     */
 getDepart(arr, data, department = []) {
    // 注意:typeof 检测数组和对象都返回‘object’
      if (typeof data === 'object') {
        for (let i = 0; arr[i] !== undefined; i++) {
          for (let j = 0; data[j] !== undefined; j++) {
            if (
              Number(arr[i]) === Number(data[j].org_id) ||
              Number(arr[i]) === Number(data[j].id)
            ) {
              department .push(data[j])
            }
          }
        }
        for (let m = 0; data[m] !== undefined; m++) {
          this.getDepart(arr, data[m].children, department )
        }
      }
      return department 
    }

调用

console.log(333, this.getDepart([1, 2], testArr))

返回结果

image.png
上一篇下一篇

猜你喜欢

热点阅读