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入门第一课 jQuery选择符
Mar 14 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
js新闻滚动 js如何实现新闻滚动效果
Jan 07 Javascript
基于jQuery实现的扇形定时器附源码下载
Oct 20 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 Javascript
浅谈Vue-cli 命令行工具分析
Nov 22 Javascript
Vue中的Props(不可变状态)
Sep 29 Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
Jul 22 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
ajax缓存问题解决途径
2006/12/06 PHP
php对数组排序代码分享
2014/02/24 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
通过命令行创建vue项目的方法
2017/07/20 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
Python常用内置函数总结
2015/02/08 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
使用K.function()调试keras操作
2020/06/17 Python
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
神农溪导游词
2015/02/11 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
Python 实现定积分与二重定积分的操作
2021/05/26 Python
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python