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

  

上一篇:教你搭建SpringSecurity3框架(附源码)


下一篇:JS内存空间详细图解