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

 

by:授客 QQ1033553122

  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)

 

结果

 

JavaScript 递归遍历json串获取相关数据的更多相关文章

  1. 递归遍历JSON树

    递归遍历JSON树 前几天有个人问我,json串的层级无限深,但在json串中的key是已知的,在json串中的value,有些事Object,有些是Array,如何把这些层级无限深的key所对应的v ...

  2. 关于遍历javascript 中的json串浏览器输出的结果不统一的情况

    我们在做项目的时候经常会用到javascript的json. 首先说一下javascript的json串是什么,json串属于javascript的一个对象,有键和值对应的对象. 一般的格式是: a ...

  3. jquery获取json对象中的key小技巧,遍历json串所有key,value

    比如有一个json var json = {"name" : "Tom", "age" : 18}; 想分别获取它的key 和 value ...

  4. java解析json串获取key和value

    网上例子巨多,纯属个人笔记: JSONObject maleArray = maleObject.getJSONObject("extension"); Iterator<S ...

  5. javascript : 递归遍历数组

    我们假设有一个对象数组. 这个对象数组里的对象,有一个叫children的key,value也是一个对象数组. 这个数组里面可能还有children... 现在我们想递归遍历它. 上代码. test_ ...

  6. c# .net获取文件夹下的所有文件(多层递归),并获取区间数据(Jsion,xml等数据)写出到处理文件,学习分享~

    static void Main(string[] args)        { string path = string.Format(@"C:\Users\Administrator\D ...

  7. 使用Python登录腾讯MTA数据分析平台,然后获取相关数据

    思路: 第一步:使用pypeteer.launcher打开浏览器, 第二步:找到mta的登录页面,默认是使用QQ登录的,需要再触发一下切换使用帐号密码登录的按钮(通过使用iframe嵌入的腾讯单点登录 ...

  8. 非交互式shell脚本案例-实现自主从oracle数据库获取相关数据,并在制定目录生成相应规则的文件脚本

    get_task_id 脚本内容 #!/usr/bin/expect#配置登陆数据库的端口set port 22#配置登陆数据库的ip地址set oracleip 10.0.4.41#配置数据库实例名 ...

  9. ajax上传json串格式的数据的处理 以及 js操作dom的另一种方式

随机推荐

  1. HC大会,华为联合合作伙伴发布一站式物联网IoT开发工具小熊派BearPi

    传统的物联网产品开发步骤复杂,涉及硬件开发.软件开发.云端开发等众多流程.而且产品的开发周期长.开发成本高.产品稳定性不佳.维护成本高.而物联网设备本身市场竞争激烈,价格低,设备更新迭代快,所以在保证 ...

  2. Java 中的 Servlet&Http&Request

    # 今日内容 : 1. Servlet 2. HTTP 协议 3. Request (就是 Servlet 中 service 方法的 形参. (有这个))     ## Servlet : 1. 概 ...

  3. 自学PHP的第22天---ThinkPHP中的路由、ThinkPHP目录结构

    这一切的一切都得从“Hello world”说起!!! 有很多东西在thinkPHP的官方开发文档上其实都有讲到,我在这里只是想记录自己每天坚持学习PHP的情况,今天接触ThinkPHP的路由,路由这 ...

  4. OSS 对象存储的那些事AmazonS3简单使用

    对象存储是根据AmazonS3来做的封装,主要功能 :文件的上传下载 生成链接 对图片的处理 查看桶内对象等一系列的操作. 本文主要做的是文件的上传下载生成链接以及前期的准备工作 以springboo ...

  5. 基于 SOA 架构,创建 ego-search-web 项目-solr集群-zookeeper集群

    项目架构 Ego-search-web 服务的消费者,ego-rpc 服务提供者 建立 ego-search-web 项目 继承:ego 依赖:ego-common   ego-rpc-service ...

  6. 2018 牛客国庆集训派对Day4 - H 树链博弈

    链接:https://ac.nowcoder.com/acm/contest/204/H来源:牛客网 题目描述 给定一棵 n 个点的树,其中 1 号结点是根,每个结点要么是黑色要么是白色 现在小 Bo ...

  7. 【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  8. k8s 开船记-修船:改 readinessProbe ,去 DaemonSet ,上 Autoscaler

    (图片来自网络) 改 readinessProbe 对于昨天 k8s 尼克号发生的触礁事故,我们分析下来主要是2个原因,一是当时4个节点不够用造成部分容器负载过高而宕机,二是 readinessPro ...

  9. Jmeter介绍以及脚本制作与调试

    目录 Jmeter介绍 Jmeter安装 Jmeter主要测试组件 Jmeter元件作用域与执行顺序 Jmeter运行原理 Jmeter脚本制作 Jmeter脚本调试 Jmeter介绍 Jmeter ...

  10. JS基础-正则

    正则表达式 创建正则表达式 使用一个正则表达式字面量 const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi; 调用RegExp对象的构造函数 const regex = ne ...