zoukankan      html  css  js  c++  java
  • js 递归取到多层chilren中的数据 vue

    处理后台返回的树形结构数据
    需求:只展示一级类目名,及下面所有标签(同级展示)
    data(){
            return{
                 originData:[ //1.后台返回的数据结构
                    {id:0,
                     categoryName:"类目1",
                     children:[
                                {Iid:0,labelName:"标签名1"},
                                {Iid:1,labelName:"标签名2"},
                              ]
                     },
                    {id:1,
                     categoryName:"类目2",
                     children:[
                                {Iid:3,labelName:"标签名3"},
                                {
                                    children:[
                                        {Iid:4,labelName:"标签名4"}
                                    ]
                                },
                              ],
                    
                    },
                    {id:2,
                     categoryName:"类目3",
                     children:[
                                {id:6,labelName:"标签名5"},
                                {id:7,
                                 children:[
                                     {Iid:5,labelName:"标签名6"},
                                     {children:[
                                         {
                                             children:{Iid:6,labelName:"标签名7"}
                                         }
                                     ]},
                                 ]
                                },
                              ],
                    
                    },  
                ],
                // 2.想要的数据结构(页面要展示需要的)
                wantData:[
                    {
                        categoryName:'类目名1',
                        labelList:[{Iid:0,labelName:"标签名1"},{Iid:1,labelName:"标签名2"}]
                    },
                    {
                        categoryName:'类目名2',
                        labelList:[{Iid:2,labelName:"标签名3"},{Iid:3,labelName:"标签名4"}]
                    },
                    {
                        categoryName:'类目名3',
                        labelList:[{Iid:4,labelName:"标签名5"},{Iid:5,labelName:"标签名6"}]
                    },
                ]
    
            }
        },
    
    第一种方法:多层循环遍历(局限:只能循环固定的层数)
     
            HandleLabelData(originData){
                let obj = {}
                let arr = []
                originData.forEach(item => {
                     obj={categoryName:"",labelList:[]}
                     obj.categoryName = item.categoryName
                     if(item.children.length){
                         item.children.forEach(item1=>{
                             if(!item1.children){
                                 arr.push(item1)
                             }else{
                                 item1.children.forEach(item2=>{
                                     if(!item2.children){
                                         arr.push(item2)
                                     }else{
                                         item2.children.forEach(item3=>{
                                             if(!item3.children){
                                                 arr.push(item3)
                                             }else{
                                                 arr = arr.concat(item3.children)  //只能循环3层
                                             }
                                         })
                                         
                                     }
                                     
                                 })
                             }
                         })
                     }
                     obj.labelList = list
                     this.wantData.push(obj)
                 }); 
    
            },
    
    第二种方法:递归
     HandleLabelData(originData){
                 let obj = {}
                 originData.forEach(item => {
                     obj={categoryName:"",labelList:[]}
                     obj.categoryName = item.categoryName
                     this.diguiData(item,obj.labelList)
                     this.wantData.push(obj)
                 });  
            },
    diguiData(originItem,labelList){
                if(originItem.children&&originItem.children.length>0){
                    originItem.children.forEach(item=>{
                        this.diguiData(item,labelList)
                    })
      }
      delete originItem.children;
      labelList.push(originItem)
      }
    

    image
    image

  • 相关阅读:
    使用phpstorm和xdebug实现远程调试
    让VS2010/VS2012添加新类时自动添加public关键字
    C#壓縮文件幫助類 使用ICSharpCode.SharpZipLib.dll
    C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件
    用C#制作PDF文件全攻略
    多条件动态LINQ 组合查询
    bootstrap fileinput 文件上传工具
    Web Uploader文件上传插件
    Bootstrap文件上传插件File Input的使用
    flashfxp v3.7 注册码
  • 原文地址:https://www.cnblogs.com/lige1234/p/14789791.html
Copyright © 2011-2022 走看看