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 相关文章推荐
jquery imgareaselect 使用利用js与程序结合实现图片剪切
Jul 30 Javascript
Jquery Autocomplete 结合asp.net使用要点
Oct 29 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 Javascript
浏览器加载、渲染和解析过程黑箱简析
Nov 29 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
第一章之初识Bootstrap
Apr 25 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
Vue系列:通过vue-router如何传递参数示例
Jan 16 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
Sep 20 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 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
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
python执行精确的小数计算方法
2019/01/21 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
高中政治教学反思
2014/01/18 职场文书
创新比赛获奖感言
2014/02/13 职场文书
主题实践活动总结
2014/05/08 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
教师党员个人总结
2015/02/10 职场文书
Hive常用日期格式转换语法
2022/06/25 数据库