JS--数组转树状数组排列

JS–数组转树状数组排列


2020年9月10日

代码

在这里插入图片描述

function getArrayTree(arrList, id, fid, children = 'children') {
  let map = []
  arrList.forEach(item => {
    let up = arrList.filter(x => x[id] == item[fid])
    let sit = arrList.filter(x => x[fid] == item[id])
    if (sit.length) item[children] = sit
    if (!(up.length && !sit.length)) map.push(item)
  })
  if (arrList.length == map.length) return map
  else return getArrayTree(map, id, fid)
}
export default getArrayTree

调用方式
在这里插入图片描述
参数

  • 原数组,如
var arr = [{
        Id: 'A01',
        fId: '',
        name: '楼栋1'
      },{
        Id: 'B01',
        fId: 'A01',
        name: '楼栋1房间1'
      },{
        Id: 'A02',
        fId: 'A00',
        name: '楼栋2'
      },{
        Id: 'C01',
        fId: 'B01',
        name: '楼栋2C01'
      }]
  • 元素id
  • 元素父级id
  • 元素子级命名(不传默认为children)


    返回
  • 树状排序后的数组,结果如下:
    在这里插入图片描述
优点
  1. 不需要引入工具包,在utils新建个js放进去就行,轻便
  2. 使用尾递归,避免堆栈超出
  3. 可使用自身数组的id及父级id,不需要将数组的id重命名
  4. 可自定义返回子类名称,之后引用更方便
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值