数组和树形结构相互转换
<script>
let data = [
{ id: 2, name: '部门B', parentId: 0 },
{ id: 3, name: '部门C', parentId: 1 },
{ id: 1, name: '部门A', parentId: 2 },
{ id: 4, name: '部门D', parentId: 1 },
{ id: 5, name: '部门E', parentId: 2 },
{ id: 6, name: '部门F', parentId: 3 },
{ id: 7, name: '部门G', parentId: 2 },
{ id: 8, name: '部门H', parentId: 4 },
{ id: 9, name: '部门I', parentId: 8 }
];
var tree = function (list, parentID) {
//定义一个用于递归查找子元素的函数
var child = function (pareID) {
//先定义一个数组,用于存储所查到的子元素
var childs = []
//循环数组
for (let i = 0; i < list.length; i++) {
//如果数组其中一项的parentId等于传入的pareID,
//说明这一项是传入的子元素,把他push进数组,
//然后重复递归自己找该项的子元素
if (list[i].parentId == pareID) {
//递归调用child,传入这一项的id,作为下一次递归的pareID,给children属性添加元素
list[i].children = child(list[i].id)
//然后把他push进数组,
childs.push(list[i])
}
}
//最后将查到的所有子元素返回
return childs;
}
return child(parentID)
}
/*function transTree(data) {
let result = []
let map = {}
if (!Array.isArray(data)) {//验证data是不是数组类型
return []
}
data.forEach(item => {//建立每个数组元素id和该对象的关系
map[item.id] = item //这里可以理解为浅拷贝,共享引用
})
data.forEach(item => {
let parent = map[item.parentId] //找到data中每一项item的爸爸
if (parent) {//说明元素有爸爸,把元素放在爸爸的chi