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操纵跨frame的三级联动select下拉选项实例介绍
May 19 Javascript
JavaScript中检测变量是否存在遇到的一些问题
Nov 11 Javascript
js中prototype用法详细介绍
Nov 14 Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 Javascript
JS/Jquery判断对象为空的方法
Jun 11 Javascript
浅谈jquery中使用canvas的问题
Oct 10 Javascript
js控制台输出的方法(详解)
Nov 26 Javascript
JavaScript中常见的八个陷阱总结
Jun 28 Javascript
ionic2懒加载配置详解
Sep 01 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
JS document对象简单用法完整示例
Jan 14 Javascript
详解uniapp的全局变量实现方式
Jan 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
自制PHP框架之设计模式
2017/05/07 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
四风问题自查报告剖析材料
2014/02/08 职场文书
质量主管工作职责
2014/09/26 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
小人国观后感
2015/06/11 职场文书
CSS3 实现的图片悬停的切换按钮
2021/04/13 HTML / CSS
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
浅谈MySQL中的六种日志
2022/03/23 MySQL