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操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
用js来获取上传的文件名纯粹是为了美化而用
Oct 23 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
Jan 05 Javascript
JavaScript获得指定对象大小的方法
Jul 01 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
jquery实现定时自动轮播特效
Dec 10 Javascript
前端编码规范(3)JavaScript 开发规范
Jan 21 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
Mar 02 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
May 20 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
手把手教你使用TypeScript开发Node.js应用
May 06 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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
js中replace的用法总结
2013/12/27 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
python提示No module named images的解决方法
2014/09/29 Python
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python3实现点餐系统
2019/01/24 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
python视频按帧截取图片工具
2019/07/23 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
医院工作检讨书范文
2014/02/10 职场文书
学校万圣节活动方案
2014/02/13 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
物流管理专业推荐信
2014/09/06 职场文书
正规借条模板
2015/05/26 职场文书