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

  • 相关阅读:
    PCA与LDA
    SVM--交叉验证
    git的基本使用
    MySQL的操作
    MySQL安装和远程连接
    javaScript进阶
    javaScript基础入门篇
    javaScript运动
    可变对象和不可变对象
    基本数据类型
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/12964806.html
Copyright © 2011-2022 走看看