1. //原始数据
  2. let data = [
  3. { id: 12304, name: "0", pid: 0 },
  4. { id: 3579, name: "1", pid: 12304 },
  5. { id: 3481, name: "1", pid: 12304 },
  6. { id: 632, name: "2", pid: 3579 },
  7. { id: 733, name: "0", pid: 0 },
  8. { id: 5673, name: "5", pid: 733 },
  9. { id: 5768, name: "6", pid: 5673 },
  10. { id: 324, name: "6", pid: 5673 },
  11. ];
  12. /*转化后数据
  13. 转化依据:若一个item.pid = 另一个item.id,则这个item属于另一个item的children
  14. pid的意思就是parentId
  15. */
  16. newData =
  17. [
  18. {
  19. "id": 12304,
  20. "name": "0",
  21. "pid": 0,
  22. "children": [{
  23. "id": 3579,
  24. "name": "1",
  25. "pid": 12304,
  26. "children": [{
  27. "id": 632,
  28. "name": "2",
  29. "pid": 3579
  30. }]
  31. }, {
  32. "id": 3481,
  33. "name": "1",
  34. "pid": 12304
  35. }]
  36. }, {
  37. "id": 733,
  38. "name": "0",
  39. "pid": 0,
  40. "children": [{
  41. "id": 5673,
  42. "name": "5",
  43. "pid": 733,
  44. "children": [{
  45. "id": 5768,
  46. "name": "6",
  47. "pid": 5673
  48. }, {
  49. "id": 324,
  50. "name": "6",
  51. "pid": 5673
  52. }]
  53. }]
  54. }
  55. ]
  56. //实现方法
  57. let arrayList = {};
  58. let newData = [];
  59. data.forEach((item) => {
  60. // id是唯一性的,pid是重复性的,所以根据id做arrayList
  61. arrayList[item.id] = item;
  62. let parent = arrayList[item.pid];
  63. parent ?
  64. (parent.children || (parent.children = [])).push(item):
  65. newData.push(item)
  66. })
  67. console.log(newData)