将之前写的判断链表是否有环的方法扩展到所有对象,写一个函数has_cycle判断任何一个对象是否有循环引用的情况。
答案:
function has_cycle(obj, m = new WeakMap()){
if(typeof obj !== 'object') {return false}
if(m[obj]) return true
m[obj] = true
const props = Object.getOwnPropertyNames(obj)
return !!props.find(prop => has_cycle(obj[prop], m)) || false
}