第51题 判断JS对象是否存在循环引用

    const obj = {
     a: 1,
     b: 2,
    }
    
    obj.c = obj
    
    // isHasCircle函数, 存在环输出true,不存在的话输出false
    isHasCircle(obj)

循环引用的判断我们可以通过map来进行暂存,当值是对象的情况下,我们将对象存在map中,循环判断是否存在,如果存在就是存在环了,同时进行递归调用。具体解答可以参考下面的代码。

解答

    function isHasCircle(obj) {
    
        let hasCircle = false
        const map = new Map()
    
        function loop(obj) {
            const keys = Object.keys(obj)
    
            keys.forEach(key => {
                const value = obj[key]
                if (typeof value == 'object' && value !== null) {
                    if (map.has(value)) {
                        hasCircle = true
                        return
                    } else {
                        map.set(value)
                        loop(value)
                    }
                }
            })
    
        }
    
        loop(obj)
    
        return hasCircle
    }
Last Updated:
Contributors: leeguooooo