js数据扁平化和树形(tree)数据, 相互转换

在看之前首先你要先弄明白思路是什么样的, 思路清晰, 看完还能不豁然开朗吗? 答案是肯定的.

一,扁平化数据处理成tree树形结构

什么是扁平化数据?顾名思义,就是你下面看到的,又扁又平没有起伏的,是不是看完提不起一点兴趣?那我来帮你, 要想处理成tree树形结构,其实就好比小蝌蚪找妈妈, 谁的id对应小蝌蚪的pid谁就是小蝌蚪的妈妈,这样的话,你是不是就帮助小蝌蚪找到妈妈了

const jsonData = [
     { id: 1, pid: 0, name: '一级菜单A' },
     { id: 2, pid: 0, name: '一级菜单B' },
     { id: 3, pid: 0, name: '一级菜单C' },
     { id: 4, pid: 1, name: '二级菜单A-A' },
     { id: 5, pid: 1, name: '二级菜单A-B' },
     { id: 6, pid: 2, name: '二级菜单B-A' },
     { id: 7, pid: 4, name: '三级菜单A-A-A' },
     { id: 8, pid: 7, name: '四级菜单A-A-A-A' },
     { id: 9, pid: 8, name: '五级菜单A-A-A-A-A' }
]
treeData(jsonData) {
     const cloneData = JSON.parse(JSON.stringify(jsonData))// 对源数据深度克隆
     return cloneData.filter(father => {
       const branchArr = cloneData.filter(child => father.id === child.pid)// 返回每一项的子级数组
       branchArr.length > 0 ? (father.children = branchArr) : ''// 如果存在子级,则给父级添加一个children属性,并赋值
       return father.pid === 0 // 返回第一层
     })
},

在这里插入图片描述

二,tree树形结构处理成扁平化数据

随便找个树形数组就行,自己试试吧

treeToList(tree) {
     var queen = []
     var out = []
     queen = queen.concat(tree)
     while (queen.length) {
       var first = queen.shift()
       if (first.children) {
         queen = queen.concat(first.children)
         delete first['children']
       }
       out.push(first)
     }
     return out
   }
三,取tree树形结构的所有子集
fnTree (arr) { // 取树状数据的所有子集
  return arr.reduce((prev, cur) => {
    return prev.concat(!cur.children ? cur : this.fnTree(cur.children))
  }, [])
},
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值