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 相关文章推荐
如何用ajax来创建一个XMLHttpRequest对象
Dec 10 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
jquery实现简单的自动播放幻灯片效果
Jun 13 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
Nov 17 Javascript
Javascript的表单验证-揭开正则表达式的面纱
Mar 18 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
Apr 28 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
微信小程序实现简单表格
Feb 14 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
linux php mysql数据库备份实现代码
2009/03/10 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
jquery中this的使用说明
2010/09/06 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
分享一个python的aes加密代码
2020/12/22 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
美国在线宠物商店:Chewy
2019/01/12 全球购物
学校教学工作总结2015
2015/05/19 职场文书
解除租赁合同协议书
2016/03/21 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
Java移除无效括号的方法实现
2021/08/07 Java/Android
python实现会员信息管理系统(List)
2022/03/18 Python