1. // 例如将 input 转成output的形式
    2. let input = [
    3. {
    4. id: 1, val: '学校', parentId: null
    5. }, {
    6. id: 2, val: '班级1', parentId: 1
    7. }, {
    8. id: 3, val: '班级2', parentId: 1
    9. }, {
    10. id: 4, val: '学生1', parentId: 2
    11. }, {
    12. id: 5, val: '学生2', parentId: 3
    13. }, {
    14. id: 6, val: '学生3', parentId: 3
    15. },
    16. ]
    17. let output = {
    18. id: 1,
    19. val: '学校',
    20. children: [{
    21. id: 2,
    22. val: '班级1',
    23. children: [
    24. {
    25. id: 4,
    26. val: '学生1',
    27. children: []
    28. },
    29. {
    30. id: 5,
    31. val: '学生2',
    32. children: []
    33. }
    34. ]
    35. }, {
    36. id: 3,
    37. val: '班级2',
    38. children: [{
    39. id: 6,
    40. val: '学生3',
    41. children: []
    42. }]
    43. }]
    44. }
    1. // 代码实现
    2. function arrayToTree(array) {
    3. let root = array[0]
    4. array.shift()
    5. let tree = {
    6. id: root.id,
    7. val: root.val,
    8. children: array.length > 0 ? toTree(root.id, array) : []
    9. }
    10. return tree;
    11. }
    12. function toTree(parenId, array) {
    13. let children = []
    14. let len = array.length
    15. for (let i = 0; i < len; i++) {
    16. let node = array[i]
    17. if (node.parentId === parenId) {
    18. children.push({
    19. id: node.id,
    20. val: node.val,
    21. children: toTree(node.id, array)
    22. })
    23. }
    24. }
    25. return children
    26. }
    27. console.log(arrayToTree(input))