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 相关文章推荐
Javascript操作URL函数修改版
Nov 07 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
Dec 12 Javascript
jQuery实现自定义右键菜单的树状菜单效果
Sep 02 Javascript
ES6所改良的javascript“缺陷”问题
Aug 23 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
Sep 26 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
Nov 03 Javascript
underscore之Collections_动力节点Java学院整理
Jul 10 Javascript
vue源码中的检测方法的实现
Sep 26 Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 Javascript
Vue vm.$attrs使用场景详解
Mar 08 Javascript
JS实现可以用键盘方向键控制的动画
Dec 11 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利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
smarty中post用法实例
2014/11/28 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
React SSR样式及SEO的实践
2018/10/22 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
Python画图高斯分布的示例
2019/07/10 Python
安装PyInstaller失败问题解决
2019/12/14 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
python属于解释语言吗
2020/06/11 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
教师网络培训感言
2014/03/09 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
公司开业主持词
2015/07/02 职场文书
新郎结婚感言
2015/07/31 职场文书
公司仓库管理制度
2015/08/04 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python