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 相关文章推荐
Autocomplete Textbox Example javascript实现自动完成成功
Aug 17 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
javascript中解析四则运算表达式的算法和示例
Aug 11 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
Apr 06 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
Apr 12 Javascript
vue中实现在外部调用methods的方法(推荐)
Feb 08 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
通过图带你深入了解vue的响应式原理
Jun 21 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
Sep 23 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
Jan 08 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安装攻略:常见问题解答(一)
2006/10/09 PHP
php中的登陆login
2007/01/18 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
阿里云:Aliyun.com
2017/02/15 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
家具商场的活动方案
2014/08/16 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
涨价通知怎么写
2015/04/23 职场文书
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android