Js练笔——用循环和递归实现追踪对象深度(循环引用关系不考虑)
function reobs(obj){ //返回对象中对象属性组成的数组 var a=[]; var b=[]; for(it in obj){ a.push(it); } for(var i=0;i<a.length;++i){ if(typeof(obj[a[i]])=="object"){ b.push(obj[a[i]]);} //将将对象数组存起来 } return b; //返回对象属性组成的数组 } function oql(obj){ var a=[]; //存放对象层级属性的数组 var count=1; //计数 a=reobs(obj); //第一层属性对象数组 while(a.length>0){ //如果存在对象属性 count++; var b=[]; for(var i=0;i<a.length;i++){ b=b.concat(reobs(a[i])); } a=b; } return count; } //递归实现 var count=1; function qlOb(items){ var a=[]; for(var i=0;i<items.length;++i){ a=a.concat(reobs(items[i])); } if(a.length==0){return count;} else{ count++; return qlOb(a); } } var b={ name:{a1:1,a2:2,a3:{pro11:11}}, age:18, hobby:"足球", pro4:{pro5:{pro7:3,pro8:{pro9:9,pro10:{pro11:10}}}} } var c={ pro1:[{a1:1},{a2:2},{a3:3},{a4:{a5:5}}] } console.log(oql(b)); //5 console.log(oql(c)); //4