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中简单的实现像C#中using功能(有源码下载)
Jan 09 Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 Javascript
快速学习JavaScript的6个思维技巧
Oct 13 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
JavaScript代码性能优化总结篇
May 15 Javascript
Bootstrap3学习笔记(三)之表格
May 20 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
May 09 Javascript
Angular使用cli生成自定义文件、组件的方法
Sep 04 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
Mar 14 Javascript
详解package.json版本号规则
Aug 01 Javascript
Postman动态获取返回值过程详解
Jun 30 Javascript
Vue按时间段查询数据组件使用详解
Aug 21 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
thinkphp备份数据库的方法分享
2015/01/04 PHP
php实现json编码的方法
2015/07/30 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
Django models filter筛选条件详解
2020/03/16 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
教师的实习鉴定
2013/12/15 职场文书
销售人才自我评价范文
2014/09/27 职场文书
白银帝国观后感
2015/06/17 职场文书
结婚典礼主持词
2015/06/29 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
Python开发五子棋小游戏
2022/04/28 Python