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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM