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删除提示框弹出是否删除对话框
Jan 07 Javascript
Windows8下搭建Node.js开发环境教程
Sep 03 Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 Javascript
JavaScript知识点总结(十)之this关键字
May 31 Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 Javascript
JavaScript实现替换字符串中最后一个字符的方法
Mar 07 Javascript
Angular2数据绑定详解
Apr 18 Javascript
Vue如何实现组件的源码解析
Jun 08 Javascript
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
Angular 项目实现国际化的方法
Jan 08 Javascript
让Vue也可以使用Redux的方法
May 23 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 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 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python中文竖排显示的方法
2015/07/28 Python
单链表反转python实现代码示例
2018/02/08 Python
python的concat等多种用法详解
2018/11/28 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
python 下载文件的多种方法汇总
2020/11/17 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
消防安全检查制度
2014/02/04 职场文书
2014政务公开实施方案
2014/02/19 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
2014年底个人工作总结
2015/03/10 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书