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中图片缓冲loading技术的实例代码
Aug 29 Javascript
Jquery插件分享之气泡形提示控件grumble.js
May 20 Javascript
JQuery中属性过滤选择器用法实例分析
May 18 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
javascript的正则匹配方法学习
Feb 24 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 Javascript
vue实现div拖拽互换位置
Jul 29 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
May 15 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
Jul 09 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 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
我的论坛源代码(三)
2006/10/09 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
Python模块学习 filecmp 文件比较
2012/08/27 Python
Apache如何部署django项目
2017/05/21 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
关于python 跨域处理方式详解
2020/03/28 Python
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
介绍一下Java的事务处理
2012/12/07 面试题
建筑专业自我鉴定
2013/10/22 职场文书
社会实践自我鉴定
2013/11/07 职场文书
财务副总经理工作职责
2013/11/25 职场文书
初一家长会邀请函
2014/01/31 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
田径运动会通讯稿
2014/09/13 职场文书
主题班会开场白
2015/06/01 职场文书
《静夜思》教学反思
2016/02/17 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技