js用闭包遍历树状数组的方法


Posted in Javascript onMarch 19, 2014

做公司项目时,要求写一个方法,方法的参数为一个菜单数组集合和一个菜单id,菜单数组的格式为树状json,如下面所示:

[{"id":28,"text":"公司信息","children":[
     {"id":1,"text":"公司文化"},
     {"id":2,"text":"招聘计划"},
     {"id":6,"text":"公司新闻","children":[
          {"id":47,"text":"行业新闻"}]},
          {"id":11,"text":"内部新闻","children":[
                         {"id":24,"text":"行政信息"},
                         {"id":27,"text":"高层指示"}]},
          {"id":22,"text":"联系我们"},
          {"id":26,"text":"产品展示","children":[
                         {"id":32,"text":"电力产品"},
                         {"id":33,"text":"配件介绍"}}]
 }] }]

现在给出的菜单id为32,要求找到对应的项,并返回对应的菜单名称,方法是先循环遍历数组,当项的id等于指定的id时,将菜单名称取出,如果不等于则看当前项是否有children,如果children不为空且数量大于0,则遍历children,这时就要用到javascript的闭包,将遍历children的方法放在一个匿名方法中,这样一直在匿名方法中递归自身,当遇到相同名称的id,就跳出循环,然后从主方法中返回得到的菜单名称,代码如下:

function getMenuName(menus, id) {
  var name = "" ;
  for (var i = 0; i < menus.length; i++) {
    if (menus[i].id == id) {
      name = menus[i].text;
      break;
    }
    else {
       (function () {
        var m = arguments[0];
        var menuid = arguments[1];
        for (var j = 0; j < m.length; j++) {
          if (m[j].id == menuid) {
            name = m[j].text;
            break;
          }
          else if m[j].children != null && m[j].children.length > 0) {
            arguments.callee(m[j].children, val);//递归匿名方法
          }
        }
      })(menus[i].children, id);
    }
  }
  return name;
}
Javascript 相关文章推荐
JS:window.onload的使用介绍
Nov 13 Javascript
JavaScript—window对象使用示例
Dec 09 Javascript
使用requestAnimationFrame实现js动画性能好
Aug 06 Javascript
详解JavaScript中的构造器Constructor模式
Jan 14 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
vue实现ToDoList简单实例
Feb 07 Javascript
jQuery简易时光轴实现方法示例
Mar 13 Javascript
使用JS动态显示文本
Sep 09 Javascript
在vue中读取本地Json文件的方法
Sep 06 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
Mar 07 Javascript
浅谈es6中的元编程
Dec 01 Javascript
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
Jquery原生态实现表格header头随滚动条滚动而滚动
Mar 18 #Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 #Javascript
使用jquery实现IE下按backspace相当于返回操作
Mar 18 #Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
Mar 18 #Javascript
js身份证判断方法支持15位和18位
Mar 18 #Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
Mar 18 #Javascript
用js将内容复制到剪贴板兼容浏览器
Mar 18 #Javascript
You might like
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
Python 函数基础知识汇总
2018/03/09 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
详解python中的数据类型和控制流
2019/08/08 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
团支部建设方案
2014/05/02 职场文书
大跃进口号
2014/06/16 职场文书
政工例会汇报材料
2014/08/26 职场文书
个人廉政承诺书
2015/04/28 职场文书
新入职员工工作总结
2015/10/15 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书