- 获得上一级对象或当前对象的数组parr
- 遍历当前对象的属性,如果是对象,则需要把其与parr中的对象对比地址(===)是否相等,如果存在相等,则返回true
- 递归处理下一级的属性flag=dd(obj[key],[...parr,obj[key]])
function dd(obj,p){
//数组中保存上一级对象或当前对象
let parr=p||[obj]
//遍历当前对象的属性
for(let key in obj){
//属性是对象才需要处理
if(typeof obj[key]==='object'){
let flag=false
//遍历父级的对象
parr.forEach(item=>{
//如果地址相等,则为循环调用
if(item===obj[key]){
flag=true
}
})
if(flag)return true
//递归处理
flag=dd(obj[key],[...parr,obj[key]])
if(flag)return true
}
}
return false
}
const a = {}, b = {}
a.c = b
a.d = b
console.log(dd(a))