0
点赞
收藏
分享

微信扫一扫

判断对象是否存在循环引用

探头的新芽 2022-04-04 阅读 80
javascript
  1. 获得上一级对象或当前对象的数组parr
  2. 遍历当前对象的属性,如果是对象,则需要把其与parr中的对象对比地址(===)是否相等,如果存在相等,则返回true
  3. 递归处理下一级的属性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))
举报

相关推荐

0 条评论