zoukankan      html  css  js  c++  java
  • 如何实现深拷贝

    • 未解决循环引用问题
    function deeoCopy(obj){
      if(typeof obj === 'object'){
        var res = obj instanceof Array ? [] : {}
        for(var key in obj){
          if(obj.hasOwnProperty(key)){
            res[key] = typeof obj[key] == 'object' ? deeoCopy(obj[key]) : obj[key]
          }
        }
      }else{
        var res = obj
      }
      return res
    } 
    
    • 已解决循环引用问题
    function deepCopy(obj) {
        // hash表,记录所有的对象的引用关系
        let map = new WeakMap();
        function dp(obj) {
            let result = obj instanceof Array ? [] : {};
            let keys = Object.keys(obj);
            let existobj = map.get(obj);
            //如果这个对象已经被记录则直接返回
            if (existobj) {
                return existobj;
            }
            map.set(obj, result);
            for (let i = 0, len = keys.length; i < len; i++) {
                let key = keys[i];
                let temp = obj[key];
                if (temp && typeof temp === 'object') {
                    result[key] = dp(temp);
                } else {
                    result[key] = temp;
                }
            }
            return result;
        }
        return dp(obj);
    } 

     循环引用

    let obj = {}
    obj.a = {}
    obj.a.b = obj.a

    let obj = {}
    obj.a = {}
    obj.c = {}
    obj.a.b = obj.c
    obj.c.d = obj.a

  • 相关阅读:
    自控力和专注力是执行力的保证
    今宵又除夕
    买了小米盒子三代
    电容相位滞后?电感超前
    lcr电桥浅谈
    ad 线束和网络
    浅谈 R_S触发器
    NTSC PAL 介绍
    verilog 之流水灯
    io 口方向调整 stm32
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/12964806.html
Copyright © 2011-2022 走看看