首页 > Web开发 > 详细

js 判断循环引用

时间:2020-05-14 14:27:15      阅读:130      评论:0      收藏:0      [点我收藏+]
var obj1 = {a:"1"};
obj1.b = {};
obj1.b.a = obj1.b;
var obj2 = {a: {c: "1"}};
obj2.a.b = obj2;
var obj3 = {a: 1, b: 2, c: {d: 4}}
const isLoop = (originObj) => {
    let wm = new WeakMap();
    let rs = false;
    function dp(obj) {
        if(!wm.has(obj)) {
            wm.set(obj, obj)
        }
        wm.set(obj, [])
        let keys = Object.keys(obj);
        for (let i = 0, len = keys.length; i < len; i++) {
            key = keys[i];
            
            if(typeof obj[key] === ‘object‘) {
                if(wm.has(obj[key])) {
                    // 如果循环引用了,终结掉
                    obj[key] = {};
                    rs = true;
                } else {
                    wm.set(obj[key], obj[key])
                }
                dp(obj[key])
            }
        }
    }
    dp(originObj);
    return rs;
}

console.log(isLoop(obj1));
console.log(isLoop(obj2));
console.log(isLoop(obj3));

这里我看了JONS-js的源码,利用weak-map来做

js 判断循环引用

原文:https://www.cnblogs.com/windseek/p/12888186.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!