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

转载于:https://www.cnblogs.com/lvmylife/p/5555312.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值