面试一脸懵:判断对象内部存在循环引用

53 阅读1分钟

只要存在循环引用 JSON.stringify 一定会报错
在这里插入图片描述

function isLoop(obj){
	let flag = false
	function check(obj, pObj){
		pObj = pObj || [obj]
		for(let key in obj){
			if(typeof obj[key] === 'object'){
				pObj.forEach(item=>{
					if(item === obj[key]){
						obj[key] = 'circle'
						flag = true
					}
				})
				check(obj[key],[...pObj, obj[key]])
			}
		}
		return obj
	}
	check(obj)
	return flag
}
let a = {}
a.b = {}
a.b.c = a
console.log(isLoop(a))