zoukankan      html  css  js  c++  java
  • 浅拷贝,深拷贝

    深拷贝:增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存

    1.递归递归去复制

    function deepCopyTwo(obj) {
        let objClone = Array.isArray(obj) ? [] : {};
        if (obj && typeof obj == 'object') {
            for (const key in obj) {
                //判断obj子元素是否为对象,如果是,递归复制
                if (obj[key] && typeof obj[key] === "object") {
                    objClone[key] = deepCopyTwo(obj[key]);
                } else {
                    //如果不是,简单复制(针对数组)
                    objClone[key] = obj[key];
                }
            }
        }
        return objClone;
    }
      
      let a=[1,22,32,4],
      b=deepClone(a);
      a[0]=2;
      console.log(a);   //[2, 22, 32, 4]
      console.log(b);   //[1, 22, 32, 4]

    2、JSON.parse(JSON.stringify(o))

    function deepCopy(o) {
        return JSON.parse(JSON.stringify(o))
    }
    
    var c = {
        age: 1,
        name: undefined,
        sex: null,
        tel: /^1[34578]d{9}$/,
        say: () => {
            console.log('hahha')
        }
    }
    // { age: 1, sex: null, tel: {} }
    需要注意的是:这种拷贝方法不可以拷贝一些特殊的属性(例如正则表达式,undefine,function)

    浅拷贝:是增加了一个指针指向已存在的内存地址

    1、= 复制

    let a=[0,1,2,3,4],b=a;
    console.log(a===b);   //true
    a[0]=1;
    console.log(a);  //[1, 1, 2, 3, 4]
    console.log(b)  //[1, 1, 2, 3, 4]

    2、object.assign(target,source)

  • 相关阅读:
    有向无环图
    2016
    Permutation Descent Counts(递推)
    Rikka with Subset
    hihoCoder 1549 或运算和
    Young Maids
    1925: [Sdoi2010]地精部落
    Problem H. Hotel in Ves Lagos
    改变presentModalView大小
    no such file to load -- bundler/setup
  • 原文地址:https://www.cnblogs.com/init00/p/12612321.html
Copyright © 2011-2022 走看看