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 相关文章推荐
javascript:void(0)的真正含义实例分析
Aug 20 Javascript
javascript深入理解js闭包
Jul 03 Javascript
PHP开发者必须掌握的6个关键字
Apr 14 Javascript
CSS javascript 结合实现悬浮固定菜单效果
Aug 23 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
Javascript ES6中数据类型Symbol的使用详解
May 02 Javascript
微信小程序实现登录遮罩效果
Nov 01 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 Javascript
VUE中V-IF条件判断改变元素的样式操作
Aug 09 Javascript
微信小程序自定义胶囊样式
Dec 27 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
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
BootStrap selectpicker
2016/06/20 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
大学生社会实践方案
2014/05/11 职场文书
数学教育专业求职信
2014/07/22 职场文书
小学生交通安全寄语
2015/02/27 职场文书
全国助残日活动总结
2015/05/11 职场文书
上诉答辩状范文
2015/05/22 职场文书
校园运动会广播稿
2015/08/19 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
Vue全局事件总线你了解吗
2022/02/24 Vue.js