给git diff获取后的结果组装成tree树结构
问题:比如我已经把git diff结果封装成了list结构:
[
{ path:'README.md' },
{ path:'android/app/build.gradle' },
{ path:'android/app/a.java' },
{ path:'src/pages/abc.jsx' },
{ path:'src/welcome.jsx' },
{ path:'src/pages/index/index.jsx' }
]
怎样才能把这种结构组装成tree树呢,我用的循环设置引用对象,也就是每次把上一个对象的children赋值给一个引用对象,然后一层一层给他赋值,但是如果层级特别深最后会报错:TypeError: Converting circular structure to JSON,而diff少的话不会报错,也有可能是没看到问题所在,哎,有没有比较好的方法组装成tree结构啊
这是我的遍历:最后再对treeObj进行一层处理就好了
const { isEmpty, find } = require('lodash')
const treeObj = {}
diffArr.map(v => {
const path = v.path
const pathList = v.path.split('/')
const l = pathList.length
let nowObj = []
let p = {}
for (let i = 0; i < pathList.length; i++) {
//path数组当前坐标
const o = pathList[i];
//当前的对象
p = treeObj[o] ? treeObj[o] : { title: o, path, children: [] }
if (i == 0) {
if (!treeObj[o]) treeObj[o] = p
}
const pp = !isEmpty(nowObj) ? find(nowObj, vv => vv.title == p.title) : false
if (pp) {
nowObj = pp.children
} else {
nowObj.push(p)
nowObj = p.children
}
}
})