JS数据转换的问题,把键值对放进一个空对象

现在有一组这样的数据

{
                "id": "1",
                "url": null,
                "remark": null,
                "parentId": "0",
                "isMenu": 1,
                "name": "用户及权限设置",
                "status": 1,
                "icon": "cc-visa",
                "sort": 1,
                "sysPermissions": [
                    {
                        "id": "4",
                        "url": "/abc/edf",
                        "remark": null,
                        "parentId": "1",
                        "isMenu": 2,
                        "name": "用户管理",
                        "status": 1,
                        "icon": null,
                        "sort": 1,
                        "sysPermissions": null
                    },
                    {
                        "id": "5",
                        "url": "/abc/bcd",
                        "remark": null,
                        "parentId": "1",
                        "isMenu": 2,
                        "name": "权限管理",
                        "status": 1,
                        "icon": null,
                        "sort": 2,
                        "sysPermissions": null
                    }
                ]
            },
            {
                "id": "2",
                "url": null,
                "remark": null,
                "parentId": "0",
                "isMenu": 1,
                "name": "流程*积分*阀值设置",
                "status": 1,
                "icon": "credit-card",
                "sort": 2,
                "sysPermissions": [
                    {
                        "id": "6",
                        "url": "/abc/def",
                        "remark": null,
                        "parentId": "2",
                        "isMenu": 2,
                        "name": "流程设置",
                        "status": 1,
                        "icon": null,
                        "sort": 1,
                        "sysPermissions": null
                    },
                    {
                        "id": "7",
                        "url": "/abc/asda",
                        "remark": null,
                        "parentId": "2",
                        "isMenu": 2,
                        "name": "积分设置",
                        "status": 1,
                        "icon": null,
                        "sort": 2,
                        "sysPermissions": null
                    },
                    {
                        "id": "8",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "2",
                        "isMenu": 2,
                        "name": "阀值设置",
                        "status": 1,
                        "icon": null,
                        "sort": 3,
                        "sysPermissions": null
                    }
                ]
            },
            {
                "id": "3",
                "url": null,
                "remark": null,
                "parentId": "0",
                "isMenu": 1,
                "name": "重点账户分组管理",
                "status": 1,
                "icon": "exclamation-triangle",
                "sort": 3,
                "sysPermissions": [
                    {
                        "id": "12",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "3",
                        "isMenu": 2,
                        "name": "重点账户分组管理",
                        "status": 1,
                        "icon": null,
                        "sort": 1,
                        "sysPermissions": null
                    }
                ]
            },
            {
                "id": "9",
                "url": null,
                "remark": null,
                "parentId": "0",
                "isMenu": 1,
                "name": "账户实名监控",
                "status": 1,
                "icon": "credit-card",
                "sort": 4,
                "sysPermissions": [
                    {
                        "id": "13",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "9",
                        "isMenu": 2,
                        "name": "账户异常监控",
                        "status": 1,
                        "icon": null,
                        "sort": 1,
                        "sysPermissions": [
                            {
                                "id": "19",
                                "url": "dwqdw/dwa",
                                "remark": null,
                                "parentId": "13",
                                "isMenu": 3,
                                "name": "频繁修改密码",
                                "status": 1,
                                "icon": null,
                                "sort": 1,
                                "sysPermissions": null
                            },
                            {
                                "id": "20",
                                "url": "ads/caw",
                                "remark": null,
                                "parentId": "13",
                                "isMenu": 3,
                                "name": "密码修改前后资",
                                "status": 1,
                                "icon": null,
                                "sort": 2,
                                "sysPermissions": null
                            }
                        ]
                    },
                    {
                        "id": "14",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "9",
                        "isMenu": 2,
                        "name": "资金交易异常监控",
                        "status": 1,
                        "icon": null,
                        "sort": 2,
                        "sysPermissions": [
                            {
                                "id": "21",
                                "url": "dwdwq/dwa",
                                "remark": null,
                                "parentId": "14",
                                "isMenu": 3,
                                "name": "单账户多股票交易",
                                "status": 1,
                                "icon": null,
                                "sort": 1,
                                "sysPermissions": null
                            },
                            {
                                "id": "22",
                                "url": "dad/wdaw",
                                "remark": null,
                                "parentId": "14",
                                "isMenu": 3,
                                "name": "单账户成交次数",
                                "status": 1,
                                "icon": null,
                                "sort": 2,
                                "sysPermissions": null
                            }
                        ]
                    },
                    {
                        "id": "15",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "9",
                        "isMenu": 2,
                        "name": "中登违法账户监控",
                        "status": 1,
                        "icon": null,
                        "sort": 3,
                        "sysPermissions": [
                            {
                                "id": "23",
                                "url": "ae/adwa",
                                "remark": null,
                                "parentId": "15",
                                "isMenu": 3,
                                "name": "限制新开账户监控",
                                "status": 1,
                                "icon": null,
                                "sort": 1,
                                "sysPermissions": null
                            }
                        ]
                    }
                ]
            },
            {
                "id": "10",
                "url": null,
                "remark": null,
                "parentId": "0",
                "isMenu": 1,
                "name": "异常账户核查反馈",
                "status": 1,
                "icon": "credit-card",
                "sort": 5,
                "sysPermissions": [
                    {
                        "id": "16",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "10",
                        "isMenu": 2,
                        "name": "监控触发情况",
                        "status": 1,
                        "icon": null,
                        "sort": 1,
                        "sysPermissions": null
                    },
                    {
                        "id": "17",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "10",
                        "isMenu": 2,
                        "name": "核查双向通道",
                        "status": 1,
                        "icon": null,
                        "sort": 2,
                        "sysPermissions": null
                    }
                ]
            },
            {
                "id": "11",
                "url": null,
                "remark": null,
                "parentId": "0",
                "isMenu": 1,
                "name": "查询统计",
                "status": 1,
                "icon": "credit-card",
                "sort": 6,
                "sysPermissions": [
                    {
                        "id": "18",
                        "url": "dwa/asda",
                        "remark": null,
                        "parentId": "11",
                        "isMenu": 2,
                        "name": "统计明细",
                        "status": 1,
                        "icon": null,
                        "sort": 1,
                        "sysPermissions": null
                    }
                ]
            }
        ]

想要转换成下面这样的

"router": [
      {
        "path": "",
        "component": "Layout",
        "redirect": "dashboard",
        "children": [
          {
            "path": "dashboard",
            "component": "dashboard/index",
            "meta": {
              "title": "首页",
              "icon": "dashboard"
            }
          }
        ]
      },
      {
        "path": "/example",
        "component": "Layout",
        "redirect": "/example/table",
        "name": "Example",
        "meta": {
          "title": "案例",
          "icon": "example"
        },
        "children": [
          {
            "path": "table",
            "name": "Table",
            "component": "table/index",
            "meta": {
              "title": "表格",
              "icon": "table"
            }
          },
          {
            "path": "tree",
            "name": "Tree",
            "component": "tree/index",
            "meta": {
              "title": "树形菜单",
              "icon": "tree"
            }
          }
        ]
      },
      {
        "path": "/form",
        "component": "Layout",
        "children": [
          {
            "path": "index",
            "name": "Form",
            "component": "form/index",
            "meta": {
              "title": "表单",
              "icon": "form"
            }
          }
        ]
      },
      {
        "path": "*",
        "redirect": "/404",
        "hidden": true
      }
    ]

现在我已经处理成下图

clipboard.png

以下是我的代码

for (let i = 0; i < router.length; i++) { //更改url为component
            router[i].component = router[i].url;
            router[i].component = 'Layout'
            router[i].meta = {};
            delete router[i].url;
            delete router[i].isMenu;
            delete router[i].parentId;
            delete router[i].remark;
            delete router[i].sort;
            delete router[i].status;
            for (let j = 0; j < router[i].sysPermissions.length; j++) {
                router[i].sysPermissions[j].component = router[i].sysPermissions[j].url.slice(5) + '/index';
                router[i].sysPermissions[j].meta = {};
                delete router[i].sysPermissions[j].url
                delete router[i].sysPermissions[j].isMenu
                delete router[i].sysPermissions[j].parentId
                delete router[i].sysPermissions[j].remark
                delete router[i].sysPermissions[j].sort
                delete router[i].sysPermissions[j].status
                delete router[i].sysPermissions[j].sysPermissions
            }
        }
        
        for (let i = 0; i < router.length; i++) { //更改id为path
            router[i].path = '/' + router[i].id
            delete router[i].id;
            for (let j = 0; j < router[i].sysPermissions.length; j++) {
                router[i].sysPermissions[j].path = router[i].sysPermissions[j].id;
                delete router[i].sysPermissions[j].id
            }
        }
        for (let i = 0; i < router.length; i++) { //更改sysPermissions为children
            router[i].children = router[i].sysPermissions;
            delete router[i].sysPermissions;
        }
        
        console.log(router)for (let i = 0; i < router.length; i++) { //更改url为component
            router[i].component = router[i].url;
            router[i].component = 'Layout'
            router[i].meta = {};
            delete router[i].url;
            delete router[i].isMenu;
            delete router[i].parentId;
            delete router[i].remark;
            delete router[i].sort;
            delete router[i].status;
            for (let j = 0; j < router[i].sysPermissions.length; j++) {
                router[i].sysPermissions[j].component = router[i].sysPermissions[j].url.slice(5) + '/index';
                router[i].sysPermissions[j].meta = {};
                delete router[i].sysPermissions[j].url
                delete router[i].sysPermissions[j].isMenu
                delete router[i].sysPermissions[j].parentId
                delete router[i].sysPermissions[j].remark
                delete router[i].sysPermissions[j].sort
                delete router[i].sysPermissions[j].status
                delete router[i].sysPermissions[j].sysPermissions
            }
        }
        
        for (let i = 0; i < router.length; i++) { //更改id为path
            router[i].path = '/' + router[i].id
            delete router[i].id;
            for (let j = 0; j < router[i].sysPermissions.length; j++) {
                router[i].sysPermissions[j].path = router[i].sysPermissions[j].id;
                delete router[i].sysPermissions[j].id
            }
        }
        for (let i = 0; i < router.length; i++) { //更改sysPermissions为children
            router[i].children = router[i].sysPermissions;
            delete router[i].sysPermissions;
        }
        
        console.log(router)

想要把name和icon字段放在meta对象里,并把name改为title

阅读 2.6k
4 个回答

描述可以清楚点,需求是什么样子不明所以。

看来是做路由权限控制,和路由字段处理,路由多做递归处理,慎用delete

我觉得返回数据和最终数据差异过大,应该从结构设计中找方法,而不是强转

建议后台处理,考虑需求同时也要考虑性能。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题