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 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
Apr 27 Javascript
js弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
JS表格组件神器bootstrap table详解(基础版)
Dec 08 Javascript
Position属性之relative用法
Dec 14 Javascript
基于JavaScript实现移除(删除)数组中指定元素
Jan 04 Javascript
JavaScript中const、var和let区别浅析
Oct 11 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
php中取得URL的根域名的代码
2011/03/23 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
numpy.linspace 生成等差数组的方法
2018/07/02 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
市三好学生主要事迹
2014/01/28 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
组织委员竞选稿
2015/11/21 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js
Python各协议下socket黏包问题原理
2022/04/12 Python