JavaScript 递归遍历json串获取相关数据

简介: JavaScript 递归遍历json串获取相关数据

递归遍历json串获取相关数据

 


 

  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,

           parentId: 2,

           parentName: null,

           name: "首页三级菜单2",

           url: "/home/level3Menu2",

           perms: null,

           requireAuth: true,

           hidden: false,

           type: 0,

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

           orderNum: 2,

           level: 0,

           children: []

         }

       ]

     },

     {

       id: 6,

       parentId: 1,

       parentName: null,

       name: "首页二级菜单2",

       url: "",

       perms: null,

       requireAuth: true,

       hidden: false,

       type: 1,

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

       orderNum: 2,

       level: 0,

       children: [

         {

           id: 7,

           parentId: 6,

           parentName: null,

           name: "首页三级菜单3",

           url: "/home/level3Menu3",

           perms: null,

           requireAuth: true,

           hidden: false,

           type: 0,

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

           orderNum: 1,

           level: 0,

           children: []

         }

       ]

     }

   ]

 },

 {

   id: 8,

   parentId: 0,

   parentName: null,

   name: "工作台",

   url: "/workbench",

   perms: null,

   requireAuth: true,

   hidden: false,

   type: 0,

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

   orderNum: 2,

   level: 0,

   children: []

 },

 {

   id: 9,

   parentId: 0,

   parentName: null,

   name: "测试视图",

   url: "/testerView",

   perms: null,

   requireAuth: true,

   hidden: false,

   type: 0,

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

   orderNum: 3,

   level: 0,

   children: [

     {

       id: 10,

       parentId: 9,

       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: 11,

           parentId: 10,

           parentName: null,

           name: "测试视图三级菜单1",

           url: "/testerView/level3Menu1",

           requireAuth: true,

           hidden: false,

           type: 0,

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

           orderNum: 1,

           level: 0,

           children: []

         },

         {

           id: 12,

           parentId: 10,

           parentName: null,

           name: "测试视图三级菜单2",

           url: "/testerView/level3Menu2",

           requireAuth: true,

           hidden: false,

           type: 0,

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

           orderNum: 2,

           level: 0,

           children: []

         }

       ]

     }

   ]

 },

 {

   id: 13,

   parentId: 0,

   parentName: null,

   name: "配置",

   url: "/settings",

   requireAuth: true,

   hidden: false,

   type: 0,

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

   orderNum: 4,

   level: 0,

   children: []

 },

 {

   id: 14,

   parentId: 0,

   parentName: null,

   name: "其它",

   url: "",

   requireAuth: true,

   hidden: false,

   type: 0,

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

   orderNum: 5,

   level: 0,

   children: [

     {

       id: 15,

       parentId: 14,

       parentName: null,

       name: "其它菜单",

       url: "/other",

       requireAuth: true,

       hidden: false,

       type: 0,

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

       orderNum: 1,

       level: 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 {

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

       getMenuRoutes(menuList[i].children, parent)

     }

   }

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

     parent.push(route)

   }

 }

return parent

}

 

调用

   var result = getMenuRoutes(navMenuData, [])

   console.log(result)

 

结果

 

 

 

  1. 3.   需求2

 

获取每级菜单的url,name,icon, id, requireAuth字段信息,构成一级节点,要求:

如果级菜单url为空,则不记录该级菜单相关的信息

 

编码

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

 var temp = []

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

   var route = {}

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

     var route = {

       path: menuList[i].url,

       name: menuList[i].name,

       children: [],

       meta: {

         icon: menuList[i].icon,

         index: menuList[i].id,

         requireAuth: menuList[i].requireAuth

       }

     }

     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

 

调用

   var result = getMenuRoutes(navMenuData, [])

   console.log(result)

 

结果

 

 

 

 


目录
相关文章
|
24天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
10天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
14天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
16天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
26天前
|
存储 JSON JavaScript
JavaScript JSON
【10月更文挑战第7天】JSON 是 JavaScript 中非常重要的一个数据格式,它为数据的表示和传输提供了一种简单而有效的方式。掌握 JSON 的使用方法和特点,对于开发高质量的 JavaScript 应用具有重要意义。
|
7天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
29天前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
1月前
|
前端开发 JavaScript
JS-数据筛选
JS-数据筛选
33 7
|
1月前
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
47 4
|
1月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!