美文网首页
js深拷贝、循环引用解决

js深拷贝、循环引用解决

作者: 不得不爱XIN | 来源:发表于2019-06-28 16:53 被阅读0次
    function deepCopy(obj) {
      // hash表,记录所有的对象的引用关系
      let map = new WeakMap();
      
      function dp(obj) {
        let result = null;
        let keys = Object.keys(obj);
        let key = null,
          temp = null,
          existobj = null;
    
        existobj = map.get(obj);
        //如果这个对象已经被记录则直接返回
        if (existobj) {
          return existobj;
        }
    
        result = {}
        map.set(obj, result);
    
        for (let i = 0, len = keys.length; i < len; i++) {
          key = keys[i];
          temp = obj[key];
          if (temp && typeof temp === 'object') {
            result[key] = dp(temp);
          } else {
            result[key] = temp;
          }
        }
        return result;
      }
    
    
      return dp(obj);
    }
    

    测试用例

    
    const obj1 = {
      x: 1
    }
    // obj1.z = obj1;
    
    const obj2 = {
      x: 2
    }
    
    obj1.next = obj2;
    obj2.next = obj1;
    
    
    const obj3 = deepCopy(obj1);
    
    console.log(obj3)
    

    相关文章

      网友评论

          本文标题:js深拷贝、循环引用解决

          本文链接:https://www.haomeiwen.com/subject/mfeecctx.html