1、单个路径 path 转为 目录结构
pathToCatlog(path) {
if (!path) return []
let pathArr = path.split('/')
let catlog = []
for (let i = pathArr.length - 1; i > 0; i--) {
let node = {
name: pathArr[i],
children: catlog
}
catlog = [node]
}
return catlog
}
let path = 'a/b/c/d'
pathToCatlog(path)
2、多个路径 Arr 转为 Tree 结构
pathArrToTree(arr) {
let treeDTO = []
arr.forEach(item => {
const nodeArray = item.name.split('/')
let children = treeDTO
for (const i of nodeArray) {
// 循环构建子节点
const node = {
label: i,
name: item.name,
commit: item.commit
}
if (!children.length === 0) children.push(node)
let isExist = false
for (const j in children) {
if (children[j].label === node.label) {
if (!children[j].children) {
children[j].children = []
}
children = children[j].children
isExist = true
break
}
}
if (!isExist) {
children.push(node)
if (!children[children.length - 1].children) {
children[children.length - 1].children = []
}
children = children[children.length - 1].children
}
}
})
return treeDTO
}
let arr = [
'origin/config',
'origin/develop-patch',
'origin/global/feature/v45/1501-test',
'origin/global/hotfix/release/v45/1507-to-develop',
]
pathArrToTree(arr)