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调用后台方法进行数据交互
Aug 20 Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 Javascript
jquery实现一个简单好用的弹出框
Sep 26 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
Jun 06 Javascript
谈谈因Vue.js引发关于getter和setter的思考
Dec 02 Javascript
微信小程序本作用域下调用全局JS详解及实例
Feb 22 Javascript
基于BootStrap实现简洁注册界面
Jul 20 Javascript
VueJs监听window.resize方法示例
Jan 17 Javascript
微信小程序如何获取用户收货地址
Nov 27 Javascript
JS面向对象编程实现的Tab选项卡案例详解
Mar 03 Javascript
详解Webpack4多页应用打包方案
Jul 16 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
2020最新CPU的性能排名
2020/04/02 数码科技
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
微信小程序动态增加按钮组件
2018/09/14 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
使用python实现knn算法
2017/12/20 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
Python按钮的响应事件详解
2019/03/04 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
年终自我鉴定
2013/10/09 职场文书
部门活动策划方案
2014/08/16 职场文书