描述:要求将下面的数据类型中每个子孙后代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