// 数据0-length,必须一层一层往后堆叠。
// 第一层默认根节点,之后第二层为第一层所有children
// 第三层为第二层所有children,依次堆叠
const dataOrin = [
{ code: '1', parentCode: null },
{ code: '2', parentCode: null },
{ code: '3', parentCode: null },
{ code: '1-1', parentCode: '1' },
{ code: '1-2', parentCode: '1' },
{ code: '1-3', parentCode: '1' },
{ code: '1-4', parentCode: '1' },
{ code: '1-5', parentCode: '1' },
{ code: '2-1', parentCode: '2' },
{ code: '2-2', parentCode: '2' },
{ code: '2-3', parentCode: '2' },
{ code: '2-4', parentCode: '2' },
{ code: '2-5', parentCode: '2' },
{ code: '3-1', parentCode: '3' },
{ code: '3-2', parentCode: '3' },
{ code: '3-3', parentCode: '3' },
{ code: '3-4', parentCode: '3' },
{ code: '3-5', parentCode: '3' },
{ code: '1-1-1', parentCode: '1-1' },
{ code: '1-1-2', parentCode: '1-1' },
{ code: '1-1-3', parentCode: '1-1' },
{ code: '1-1-4', parentCode: '1-1' },
{ code: '1-2-1', parentCode: '1-2' },
{ code: '1-2-2', parentCode: '1-2' },
{ code: '1-2-3', parentCode: '1-2' },
{ code: '1-3-1', parentCode: '1-3' },
{ code: '1-3-2', parentCode: '1-3' },
{ code: '3-1-1', parentCode: '3-1' },
{ code: '3-1-2', parentCode: '3-1' },
{ code: '3-1-3', parentCode: '3-1' },
{ code: '3-1-4', parentCode: '3-1' },
]
// 采用递归,生成
function getTree() {
const treeData = []
const dfs = function (data, parentObj) {
const currentObj = {}
let index = 0
while (true) {
const current = data[index]
if (current && !current.parentCode) {
// 初始根节点
currentObj[current.code] = current
treeData.push(current)
} else if (current && parentObj[current.parentCode]) {
// 判断parentCode是否存在,如果不存在,进入下一层
// 为父级对象赋值children
if (parentObj[current.parentCode].children) {
parentObj[current.parentCode].children.push(current)
} else {
// 初始化children
parentObj[current.parentCode].children = [current]
}
// 记录当前层对象
currentObj[current.code] = current
} else {
// 当前值父级不存在时,说明是祖父关系,下一次递归,才是父子关系
break
}
index++
}
// 删除遍历过的数据,继续下一层遍历
const newArr = data.slice(index, data.length)
if (newArr.length > 1) {
// 返回带有children的currentObj
dfs(newArr, currentObj)
} else {
// 数组遍历完成,return
return
}
}
dfs(dataOrin, {})
return treeData
}
js 一维数组生成树结构
最新推荐文章于 2024-07-24 11:09:48 发布