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下将字符串当函数执行的方法
Jul 13 Javascript
jquery延迟加载外部js实现代码
Jan 11 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
Jan 12 Javascript
JavaScript函数柯里化详解
Apr 29 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 Javascript
JS防抖和节流实例解析
Sep 24 Javascript
解决$store.getters调用不执行的问题
Nov 08 Javascript
vue3+typescript实现图片懒加载插件
Oct 26 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
Nov 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学习笔记 数组遍历实现代码
2011/06/09 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
PHP处理会话函数大总结
2015/08/05 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
Javascript计算时间差的函数分享
2011/07/04 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
Python自定义简单图轴简单实例
2018/01/08 Python
学生信息管理系统python版
2018/10/17 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
Python的形参和实参使用方式
2019/12/24 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
学生党员一帮一活动总结
2014/07/08 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
廉政承诺书范文
2015/04/28 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Go 中的空白标识符下划线
2022/03/25 Golang