天天看點

JavaScript 遞歸周遊json串擷取相關資料

遞歸周遊json串擷取相關資料

by:授客 QQ:1033553122

  1. 1.   測試資料

// 導航菜單

[

  {

    id: 1,

    parentId: 0,

    parentName: null,

    name: "首頁",

    url: "/home",

    perms: null,

    requireAuth: true,

    hidden: false,

    type: 0,

    icon: "fa fa-home fa-lg",a

    orderNum: 1,

    level: 0,

    children: [

      {

        id: 2,

        parentId: 1,

        parentName: null,

        name: "首頁二級菜單1",

        url: "",

        perms: null,

        requireAuth: true,

        hidden: false,

        type: 1,

        icon: "fa fa-home fa-lg",

        orderNum: 1,

        level: 0,

        children: [

          {

            id: 3,

            parentId: 2,

            parentName: null,

            name: "首頁三級菜單1",

            url: "",

            perms: null,

            requireAuth: true,

            hidden: false,

            type: 1,

            icon: "fa fa-home fa-lg",

            orderNum: 1,

            level: 0,

            children: [

              {

                id: 4,

                parentId: 3,

                parentName: null,

                name: "首頁四級菜單1",

                url: "/home/level4Menu1",

                perms: null,

                requireAuth: true,

                hidden: false,

                type: 0,

                icon: "fa fa-home fa-lg",

                orderNum: 1,

                level: 0,

                children: []

              }

            ]

          },

            id: 5,

            name: "首頁三級菜單2",

            url: "/home/level3Menu2",

            type: 0,

            orderNum: 2,

            children: []

          }

        ]

      },

        id: 6,

        name: "首頁二級菜單2",

        orderNum: 2,

            id: 7,

            parentId: 6,

            name: "首頁三級菜單3",

            url: "/home/level3Menu3",

      }

    ]

  },

    id: 8,

    name: "工作台",

    url: "/workbench",

    icon: "fa fa-home fa-lg",

    orderNum: 2,

    children: []

    id: 9,

    name: "測試視圖",

    url: "/testerView",

    orderNum: 3,

        id: 10,

        parentId: 9,

        name: "測試視圖二級菜單1",

            id: 11,

            parentId: 10,

            name: "測試視圖三級菜單1",

            url: "/testerView/level3Menu1",

            id: 12,

            name: "測試視圖三級菜單2",

            url: "/testerView/level3Menu2",

    id: 13,

    name: "配置",

    url: "/settings",

    orderNum: 4,

    id: 14,

    name: "其它",

    url: "",

    orderNum: 5,

        id: 15,

        parentId: 14,

        name: "其它菜單",

        url: "/other",

        type: 0,

        children: []

  }

]

  1. 2.   需求1

擷取菜單“路由”資訊:

擷取每級菜單的url,name,icon, id, requireAuth字段資訊,構成節點,以及其子菜單對應字段的資訊,構成子節點,要求:

如果本級菜單url為空,則不記錄該級菜單相關的資訊,此時,如果其子菜單url不為空,則要記錄其子菜單相關字段的資訊,并向上查找離該子菜單最近,并且url不為空的菜單資訊,并把該菜單資訊當做其父節點,形如以下

[{path:"/home ",

name: "首頁",

meta: {icon: "fa fa-home fa-lg", index: 4, requireAuth: true},

children:[{path: "/home/level3Menu3", 

name: "首頁三級菜單3", 

meta: {icon: "fa fa-home fa-lg", index: 4, requireAuth: true},

children: []},

...

},

如果本級菜單url不為空,則記錄該級菜單自身的資訊,作為父節點,此時,如果其子菜單url不為空,則要記錄其子菜單相關字段的資訊,構成子節點,否則不記錄子菜單資訊

編碼

function getMenuRoutes(menuList = [], parent = []) {

  for (var i = 0; i < menuList.length; i++) {

    var route = {}

    if (menuList[i].url && /\S/.test(menuList[i].url)) {

      route = {

        path: menuList[i].url,

        name: menuList[i].name,

        children: [],

        meta: {

          icon: menuList[i].icon,

          index: menuList[i].id,

          requireAuth: menuList[i].requireAuth

        }

      }

      if (menuList[i].children && menuList[i].children.length >= 1) {

        getMenuRoutes(menuList[i].children, route["children"])

    } else {

        getMenuRoutes(menuList[i].children, parent)

    }

    if (JSON.stringify(route) != "{}") {

      parent.push(route)

return parent

}

調用

    var result = getMenuRoutes(navMenuData, [])

    console.log(result)

結果

JavaScript 遞歸周遊json串擷取相關資料
  1. 3.   需求2

擷取每級菜單的url,name,icon, id, requireAuth字段資訊,構成一級節點,要求:

如果級菜單url為空,則不記錄該級菜單相關的資訊

function getMenuRoutes (menuList = [], routes = []) {

  var temp = []

      var route = {

      routes.push(route)

    if (menuList[i].children && menuList[i].children.length >= 1) {

      temp = temp.concat(menuList[i].children)

  if (temp.length >= 1) {

    getDynamicRoutes2(temp, routes)

  return routes

JavaScript 遞歸周遊json串擷取相關資料

作者:授客

QQ:1033553122

全國軟體測試QQ交流群:7156436

Git位址:https://gitee.com/ishouke

友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!

作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!

           微信打賞                       

支付寶打賞                  全國軟體測試交流QQ群  

JavaScript 遞歸周遊json串擷取相關資料
JavaScript 遞歸周遊json串擷取相關資料
JavaScript 遞歸周遊json串擷取相關資料

繼續閱讀