• 一维数组根据父id转为嵌套树结构


    做菜单管理的时候,后端返回的数据结构是一维数组时,自己需要把它处理成嵌套的格式,用于菜单页面的展示,效果如下。

    未处理前数据格式:

    1. let aa = [{
    2. "id": 6,
    3. "name": "首页",
    4. "parent_id": 1,
    5. "path": "/text/xx",
    6. "status": true,
    7. "sep": 1
    8. }, {
    9. "id": 8,
    10. "name": "资产管理",
    11. "parent_id": 1,
    12. "path": "/text/xx",
    13. "status": true,
    14. "sep": 1
    15. }, {
    16. "id": 10,
    17. "name": "数据分析",
    18. "parent_id": 1,
    19. "path": "/text/xx",
    20. "status": true,
    21. "sep": 3
    22. }, {
    23. "id": 15,
    24. "name": "监控大屏",
    25. "parent_id": 10,
    26. "path": "/text/xx",
    27. "status": true,
    28. "sep": 11
    29. }, {
    30. "id": 16,
    31. "name": "用户报表",
    32. "parent_id": 10,
    33. "path": "/text/xx",
    34. "status": true,
    35. "sep": 22
    36. }, {
    37. "id": 17,
    38. "name": "主机列表",
    39. "parent_id": 8,
    40. "path": "/text/xx",
    41. "status": true,
    42. "sep": 1
    43. }, {
    44. "id": 18,
    45. "name": "均衡列表",
    46. "parent_id": 8,
    47. "path": "/text/xx",
    48. "status": true,
    49. "sep": 2
    50. }, {
    51. "id": 23,
    52. "name": "快照",
    53. "parent_id": 8,
    54. "path": "/text/xx",
    55. "status": true,
    56. "sep": 5
    57. }, {
    58. "id": 24,
    59. "name": "快照管理",
    60. "parent_id": 23,
    61. "path": "/text/xx",
    62. "status": true,
    63. "sep": 1
    64. }, {
    65. "id": 25,
    66. "name": "快照链管理",
    67. "parent_id": 23,
    68. "path": "/text/xx",
    69. "status": true,
    70. "sep": 2
    71. }, {
    72. "id": 37,
    73. "name": "域名管理",
    74. "parent_id": 1,
    75. "path": "/text/xx",
    76. "status": true,
    77. "sep": 2
    78. }]

    处理方法如下:

    1. /**
    2. *一维数组改成children多维数组
    3. */
    4. function listToTree (data) {
    5. let arr = JSON.parse(JSON.stringify(data))
    6. const listChildren = (obj, filter) => {
    7. [arr, obj.children] = arr.reduce((res, val) => {
    8. if (filter(val)) { res[1].push(val) } else { res[0].push(val) }
    9. return res
    10. }, [[], []])
    11. obj.children.forEach(val => {
    12. if (arr.length) { listChildren(val, obj => obj.parent_id === val.id) }
    13. })
    14. if (!obj.children.length) {
    15. delete obj.children
    16. }
    17. }
    18. const tree = {}
    19. listChildren(tree, val => arr.findIndex(i => i.id === val.parent_id) === -1)
    20. return tree.children
    21. }

    打印输出的代码格式:

    1. [{
    2. "id": 6,
    3. "name": "首页",
    4. "parent_id": 1,
    5. "path": "/text/xx",
    6. "status": true,
    7. "sep": 1
    8. },
    9. {
    10. "id": 8,
    11. "name": "资产管理",
    12. "parent_id": 1,
    13. "path": "/text/xx",
    14. "status": true,
    15. "sep": 1,
    16. "children": [{
    17. "id": 17,
    18. "name": "主机列表",
    19. "parent_id": 8,
    20. "path": "/text/xx",
    21. "status": true,
    22. "sep": 1
    23. },
    24. {
    25. "id": 18,
    26. "name": "均衡列表",
    27. "parent_id": 8,
    28. "path": "/text/xx",
    29. "status": true,
    30. "sep": 2
    31. }, {
    32. "id": 23,
    33. "name": "快照",
    34. "parent_id": 8,
    35. "path": "/text/xx",
    36. "status": true,
    37. "sep": 5,
    38. "children": [{
    39. "id": 24,
    40. "name": "快照管理",
    41. "parent_id": 23,
    42. "path": "/text/xx",
    43. "status": true,
    44. "sep": 1
    45. }, {
    46. "id": 25,
    47. "name": "快照链管理",
    48. "parent_id": 23,
    49. "path": "/text/xx",
    50. "status": true,
    51. "sep": 2
    52. }]
    53. }
    54. ]
    55. },
    56. {
    57. "id": 10,
    58. "name": "数据分析",
    59. "parent_id": 1,
    60. "path": "/text/xx",
    61. "status": true,
    62. "sep": 3,
    63. "children": [{
    64. "id": 15,
    65. "name": "监控大屏",
    66. "parent_id": 10,
    67. "path": "/text/xx",
    68. "status": true,
    69. "sep": 11
    70. }, {
    71. "id": 16,
    72. "name": "用户报表",
    73. "parent_id": 10,
    74. "path": "/text/xx",
    75. "status": true,
    76. "sep": 22
    77. }]
    78. },
    79. {
    80. "id": 37,
    81. "name": "域名管理",
    82. "parent_id": 1,
    83. "path": "/text/xx",
    84. "status": true,
    85. "sep": 2
    86. }
    87. ]

     

     其他相关联的数据格式处理:

    一维数组根据父id转为嵌套树结构

    多维数组转成一维数组

    children嵌套的多维数组关键字排序

    * 喜欢可点赞/ 收藏/ 评论,给我动力持续更新哒!\‘▽′/

  • 相关阅读:
    立方体IV(暑假每日一题 10)
    打开新页打开企业邮箱FOXMAIL常见错误提示“Message format error”
    C# 图解教程 第5版 —— 第15章 事件
    Java上传文件大小受限怎么解决
    如何有效管理产品生命周期(How to Effectively Manage a Product Lifecycle)
    CentOS7 Hadoop3.3.0 安装与配置
    SAP创建权限对象、角色、并分配角色
    实现简单的shared_ptr
    haproxy
    2022年,下半年互联网最靠谱的搞钱方法?
  • 原文地址:https://blog.csdn.net/caimingxian401/article/details/125361004