js遞歸彙總

1.數據結構介紹

[
    {
        "pid":1028,
        "id":"2c91851f6b6f07b8016bd19ab465000b",
        "siteId":"2c9185c36a262618016ad3f8c2a4001c",
        "shape":"",
        "name":"item1",
        "category":"voice",
        "point":"10",
        "type":1,
        "url":"",
        "icon":"smile",
        "parentId":null,
        "isInherit":false,
        "createTime":"2019-07-08T12:41:45.000+0000",
        "isParent":null,
        "childs":[
            {
                "pid":1028,
                "id":"2c91851f6b6f07b8016bqwqw00b",
                "siteId":"2c9185c36a262618016ad3f8c2a4001c",
                "shape":"",
                "name":"item3",
                "category":"voice",
                "point":"10",
                "type":1,
                "url":"",
                "icon":"smile",
                "parentId":null,
                "isInherit":false,
                "createTime":"2019-07-08T12:41:45.000+0000",
                "isParent":null,
                "childs":[
                    {
                        "pid":1028,
                        "id":"2c91851f6bsdafaf07ddddw00b",
                        "siteId":"2c9185c36a262618016ad3f8c2a4001c",
                        "shape":"",
                        "name":"item7",
                        "category":"voice",
                        "point":"10",
                        "type":1,
                        "url":"",
                        "icon":"smile",
                        "parentId":null,
                        "isInherit":false,
                        "createTime":"2019-07-08T12:41:45.000+0000",
                        "isParent":null,
                        "childs":null
                    }
                ]
            },
            {
                "pid":1028,
                "id":"2c91851f6b6asas6bqwqw00b",
                "siteId":"2c9185c36a262618016ad3f8c2a4001c",
                "shape":"",
                "name":"item4",
                "category":"voice",
                "point":"10",
                "type":1,
                "url":"",
                "icon":"smile",
                "parentId":null,
                "isInherit":false,
                "createTime":"2019-07-08T12:41:45.000+0000",
                "isParent":null,
                "childs":null
            }
        ]
    },
    {
        "pid":1029,
        "id":"2c91851f6b6f07b8016bd19c9431000c",
        "siteId":"2c9185c36a262618016ad3f8c2a4001c",
        "shape":"voice",
        "name":"item2",
        "category":"act",
        "point":"15101",
        "type":2,
        "url":"",
        "icon":"crown",
        "parentId":"2c91851f6b6f07b8016bd19ab465000b",
        "isInherit":false,
        "createTime":"2019-07-08T12:43:48.000+0000",
        "isParent":null,
        "childs":[
            {
                "pid":1028,
                "id":"2c91851f6b6f07ddddw00b",
                "siteId":"2c9185c36a262618016ad3f8c2a4001c",
                "shape":"",
                "name":"item5",
                "category":"voice",
                "point":"10",
                "type":1,
                "url":"",
                "icon":"smile",
                "parentId":null,
                "isInherit":false,
                "createTime":"2019-07-08T12:41:45.000+0000",
                "isParent":null,
                "childs":null
            },
            {
                "pid":1028,
                "id":"2c91851f6b6asasaaaqwqw00b",
                "siteId":"2c9185c36a262618016ad3f8c2a4001c",
                "shape":"",
                "name":"item6",
                "category":"voice",
                "point":"10",
                "type":1,
                "url":"",
                "icon":"smile",
                "parentId":null,
                "isInherit":false,
                "createTime":"2019-07-08T12:41:45.000+0000",
                "isParent":null,
                "childs":null
            }
        ]
    }]

1.1根據勾選的最底層 子節點 ,獲取權限樹 數據

 getPriTreeDataBySelectedPriIdList(treeData, priIdList){
        //根據最底層子節點,獲取權限樹數據
        return treeData.filter(item=>{
          if(item.childs && item.childs.length > 0 ){
            item.childs = this.getPriTreeDataBySelectedPriIdList(item.childs,priIdList);
            return item.childs && item.childs.length >0;
          }else {
            return priIdList.indexOf(item.id) > -1;
          }
        });
      },

1.2重置權限樹數據

resetTreeData(priTreeData){
        //重置權限樹數據
        priTreeData.map(item => {
          item.isInherit = false;
          if(item.childs && item.childs.length>0){
            this.resetTreeData(item.childs);
          }
        })

      },

1.3根據任意ID獲取item對象

  getItemFromPriTreeData(priTreeData, priId){
        //根據任意ID獲取item對象
        let result = null;
        for(let priItemIndex in priTreeData){
          if(result !== null){
            break;//這裏是關鍵
          }
          let priItem = priTreeData[priItemIndex];
          if(priItem.id === priId){
            result = priItem;
            break;
          }else if(priItem.childs && priItem.childs.length > 0){
            result = this.getItemFromPriTreeData(priItem.childs, priId);
          }
        }
        return result;
      },

1.4父節點勾選了,勾選所有的子節點

setIsInheritValueWithParentPri(priList, isInherit){
        // 遞歸的設置"是否繼承屬性"
        // 父節點勾選是否繼承,子節點跟隨父節點變化   子節點變化,父節點不跟隨變化
        priList.map(priItem => {
          if(priItem.type !== 3){
            priItem.isInherit = isInherit;
          }

          if(priItem.childs && priItem.childs.length > 0){
            this.setIsInheritValueWithParentPri(priItem.childs, isInherit);
          }
        })
      },

1.5設置詳情頁中---展示樹數據中的isInherit

setInheritOfShowPriTreeData(showPriTreeData, priTreeDataPriIdAndHeritObject){
        // 設置詳情頁中---展示樹數據中的isInherit
        showPriTreeData.map(priItem => {

          priItem.isInherit = priTreeDataPriIdAndHeritObject[priItem.id];
          if(priItem.childs && priItem.childs.length > 0){
            this.setInheritOfShowPriTreeData(priItem.childs, priTreeDataPriIdAndHeritObject )
          }
        })
      },

1.6設置選中的權限樹數據相關信息到priTreeDataPriIdAndHeritObject,priIdListIncludeParentPriId中

 setPriTreeDataPriIdAndHeritObject(priTreeDataBySelectedPriIdList, priTreeDataPriIdAndHeritObject,priIdListIncludeParentPriId){
        // 設置選中的權限樹數據相關信息到priTreeDataPriIdAndHeritObject,priIdListIncludeParentPriId中
        //priTreeDataPriIdAndHeritObject是對象,key是權限ID,value是isInherit
        //priIdListIncludeParentPriId 根據最底層子節點獲得的權限樹數據,把所有的權限ID都放到列表中
        priTreeDataBySelectedPriIdList.map(priItem => {
          priIdListIncludeParentPriId.push( priItem.id);
          if(priItem.isInherit){
            priTreeDataPriIdAndHeritObject[ipriItem.id] = priItem.isInherit;
          }else{
            priTreeDataPriIdAndHeritObject[priItem.id] = false;
          }

          if(priItem.childs && priItem.childs.length>0){
            this.setPriTreeDataPriIdAndHeritObject(priItem.childs, priTreeDataPriIdAndHeritObject,priIdListIncludeParentPriId)
          }
        })
      }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章