参考大神:
    作者:黑刀蛇黥
    链接:https://juejin.cn/post/7082379156234698759
    来源:稀土掘金

    1. var arr = [
    2. { id: '29', pid: '', name: '总裁办' },
    3. { id: '2c', pid: '', name: '财务部' },
    4. { id: '2d', pid: '2c', name: '财务核算部' },
    5. { id: '2f', pid: '2c', name: '薪资管理部' },
    6. { id: 'd2', pid: '', name: '技术部' },
    7. { id: 'd3', pid: 'd2', name: 'Java研发部' },
    8. { id: 'd4', pid: 'd3', name: 'spring研发部' },
    9. ]
    10. /* 定义封装函数 */
    11. function toDo(arr, pid = '') {
    12. /* 得到处理之后的树形数据 */
    13. var newArr = []
    14. /* 1-循环数组 */
    15. arr.forEach((item) => {
    16. if (item.pid === pid) {
    17. /* 3-收集不是第一层的 收集子集 */
    18. var child = toDo(arr, item.id)
    19. if (child.length) {
    20. item.children = child
    21. }
    22. // console.log(obj, 8)
    23. /* 2-筛选第一层 */
    24. newArr.push(item)
    25. }
    26. })
    27. return newArr
    28. }
    29. /* 调用函数 */
    30. console.dir(toDo(arr))
    31. 作者:黑刀蛇黥
    32. 链接:https://juejin.cn/post/7082379156234698759
    33. 来源:稀土掘金
    34. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    35. 最后的结果:
    36. var arr = [
    37. { id: '29', pid: '', name: '总裁办' },
    38. { id: '2c', pid: '', name: '财务部',children:[
    39. { id: '2d', pid: '2c', name: '财务核算部' },
    40. { id: '2f', pid: '2c', name: '薪资管理部' },
    41. ]
    42. },
    43. { id: 'd2', pid: '', name: '技术部',children:[
    44. { id: 'd3', pid: 'd2', name: 'Java研发部' },
    45. ] },
    46. ]

    参考: https://juejin.cn/post/7082379156234698759