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)
Oct 31 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
Nov 04 Javascript
javascript 动态创建表格
Jan 08 Javascript
在JavaScript中处理数组之reverse()方法的使用
Jun 09 Javascript
JQuery实现左右滚动菜单特效
Sep 28 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
基于js中的原型(全面讲解)
Sep 19 Javascript
详解微信小程序之scroll-view的flex布局问题
Jan 16 Javascript
4 种滚动吸顶实现方式的比较
Apr 09 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 Javascript
JavaScript常用工具函数汇总(浏览器环境)
Sep 17 Javascript
JavaScript实现登录窗体
Jun 22 Javascript
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
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
php简单压缩css样式示例
2016/09/22 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
jQuery基础知识小结
2014/12/22 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
linux下安装easy_install的方法
2013/02/10 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
老师自我鉴定范文
2013/12/25 职场文书
大四本科生的自我评价
2013/12/30 职场文书
乐观大学生的自我评价
2014/01/10 职场文书
社区党员先进事迹
2014/01/22 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
总裁助理岗位职责
2014/02/17 职场文书
职代会闭幕词
2015/01/28 职场文书
赡养老人协议书范本
2015/08/06 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书