怎样把git diff的级联文件结果转成tree树结构呢

给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
            }
          }
        })
阅读 820
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题