zoukankan      html  css  js  c++  java
  • 04-树形结构转数组/数组转树形结构/树形结构传入指定id找到所在那一项

    树形结构转成(平铺)数组

    var arr =  [{
        label: '一级 1',
        children: [{
          label: '二级 1-1',
          children: [{
            label: '三级 1-1-1'
          }]
        }]
      }, {
        label: '一级 2',
        children: [{
          label: '二级 2-1',
          children: [{
            label: '三级 2-1-1'
          }]
        }, {
          label: '二级 2-2',
          children: [{
            label: '三级 2-2-1'
          }]
        }]
      }, {
        label: '一级 3',
        children: [{
          label: '二级 3-1',
          children: [{
            label: '三级 3-1-1'
          }]
        }, {
          label: '二级 3-2',
          children: [{
            label: '三级 3-2-1'
          }]
        }]
      }]
    
      
      function becomeArr(arr){
        let newArr = [];
        ~function fn(arr){
          arr.forEach(item=>{
            if(item.children && item.children.length > 0){
              fn(item.children);
            }
            newArr.push({
                label:item.label
              })
          })
        }(arr)
      return newArr;
    }
    let res = becomeArr(arr);
    console.log(res);

    数组(有parentId)转树形结构

    var arr = [
      {
        id:'00',
        nam:'公司'
      },{
        id:'01',
        name:'一级部门',
        parentId:'00'
      },{
        id:'02-1',
        name:'二级部门',
        parentId:'01'
      },{
        id:'02-2',
        name:'二级部门',
        parentId:'01'
      },{
        id:'03-1',
        name:'三级部门',
        parentId:'02-2'
      },{
        id:'03-2',
        name:'三级部门',
        parentId:'02-2'
      },
    ];
    
    function becomeTree(arr){
      let parArr = arr.filter(x=>!x.parentId);
      let sonArr = arr.filter(x=>x.parentId);
    
      function fn(par,son){
        par.forEach(item=>{
          son.forEach(x=>{
            if(item.id === x.parentId){
              fn([x],sonArr)
              if(!item.children){
                item.children=[];
              }
              item.children.push(x)
            }
          })
        })
      }
      fn(parArr,sonArr);
      return parArr;
    }
    
    let res = becomeTree(arr);
    console.log(res);

     树形结构传入指定id找到所在那一项

    var data = [{
            id: 1,
            label: '一级 1',
            children: [{
                id: 2,
                label: '二级 1-1',
                children: [{
                    id: 3,
                    label: '三级 1-1-1'
                }]
            }]
        }, {
            id: 4,
            label: '一级 2',
            children: [{
                id: 5,
                label: '二级 2-1',
                children: [{
                    id: 6,
                    label: '三级 2-1-1'
                }]
            }, {
                id: 7,
                label: '二级 2-2',
                children: [{
                    id: 8,
                    label: '三级 2-2-1'
                }]
            }]
        }, {
            id: 9,
            label: '一级 3',
            children: [{
                id: 10,
                label: '二级 3-1',
                children: [{
                    id: 11,
                    label: '三级 3-1-1'
                }]
            }, {
                id: 12,
                label: '二级 3-2',
                children: [{
                    id: 13,
                    label: '三级 3-2-1'
                }]
            }]
        }]
        // 这里用找传入的指定id,返回传入的这个id所在的那个对象
    function findObjFn(arr, id) {
        let temp = null;
        (function fn(arr, id) {
            arr.forEach(item => {
                if (item.id === id) {
                    temp = item;
                }
                if (item.children && item.children.length > 0) {
                    fn(item.children, id);
                }
            })
        })(arr, id)
        return temp;
    }
    let res = findObjFn(data, 5)
    console.log(res);
  • 相关阅读:
    Redis集群持久化
    Redis集群介绍
    电脑CPU讲解
    Centos7 k8s v1.5.2二进制部署安装-交付jenkins到k8s集群
    Centos7 k8s v1.5.2二进制部署安装-交付dubbo服务到k8s集群准备工作
    华为云全栈产品福利来袭,终身VIP免费送!
    Centos7 k8s v1.5.2二进制部署安装-dashboard--WEB管理
    Centos7 k8s v1.5.2二进制部署安装-服务暴露ingress控制器之traefik
    简单两步禁止 iOS 系统频繁提示更新,亲测有效
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/haoqiyouyu/p/14893906.html
Copyright © 2011-2022 走看看