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
)
返回 - 树状排序后的数组,结果如下:
优点
- 不需要引入工具包,在utils新建个js放进去就行,轻便
- 使用尾递归,避免堆栈超出
- 可使用自身数组的id及父级id,不需要将数组的id重命名
- 可自定义返回子类名称,之后引用更方便