zoukankan      html  css  js  c++  java
  • JavaScript知识递归实现数组中指定后代元素的查找

    描述:要求将下面的数据类型中每个子孙后代id放入一个数组并返回

        var arr = [
                    {"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":"配件介绍","children":[{"id":55,"text":"公司文化"}]}
                            ]}
                        ]
                     }
                 ] 

    利用递归实现方法:

    function getMenuName(obj){
      var arr = [];
      for(var i=0,len=obj.length;i<len;i++){
        arr.push(obj[i].id);
        if(obj[i].children != null && obj[i].children.length>0){
          (function(){
            var _obj = arguments[0];
            for(var j=0,_len=_obj.length;j<_len;j++){
              arr.push(_obj[j].id);
              if(_obj[j].children!=null&&_obj[j].children.length>0){
                arguments.callee(_obj[j].children);//递归匿名方法
              }
            }
          })(obj[i].children)
        }
      }
      return arr;
    }

    大致思路是:先循环传入的第一层并判断是否有子项,如果存在子项就进入一个闭包内的二层循环遍历子项,如果子项还有子项就递归调用本身的匿名函数进一步遍历。

    转自:http://www.cnblogs.com/ewqs0755/archive/2016/06/02/5553895.html

  • 相关阅读:
    C++ | Int转十六进制字符串
    Qt | QML Image SSL handshake failed
    《大话数据结构》第一章 数据结构绪论
    8组Beta冲刺4/5
    8组Beta冲刺1/5
    8组Beta冲刺3/5
    8组Beta冲刺2/5
    8组Beta冲刺5/5
    软工实践个人总结
    8组Beta冲刺总结
  • 原文地址:https://www.cnblogs.com/lvmylife/p/5555312.html
Copyright © 2011-2022 走看看