zoukankan      html  css  js  c++  java
  • JS----深拷贝与浅拷贝

    参考学习:https://blog.csdn.net/baidu_36065997/article/details/80309991
    https://www.cnblogs.com/echolun/p/7889848.html
    在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。
    深拷贝:
    数组:
    法一:for循环

    let arr1 = [1,2,3];
    let arr2 = copyArr(arr1);
    function copyArr(arr){
        let res=[];
        for(let i=0,length=arr.length;i<length;i++){
            res.push(arr[i]);
        }
        return res;
    }
    

    法二: slice

    let arr1 = [1,2,3];
    let arr2 = arr1.slice(0);
    

    法三: concat

    let arr1 = [1,2,3];
    let arr2 = arr1.concat();
    

    法四:扩展运算符

    let arr1 = [1,2,3];
    let [...arr2] = arr1;
    

    法五:Array.from
    如果参数是一个真正的数组,Array.from会返回一个一模一样的新数组

        let arr1 = [1,2,3];
        let arr2 = Array.from(arr1);
    

    对象
    法一:for循环

    let obj1={count:1,name:'grace',age:1};
    let obj2 = copyObj(obj){
    let res = {};
    for(let key in obj){
      res[key]=obj[key];
    }
    return res;
    }
    

    法二:利用JSON

        let obj1={count:1,name:'grace',age:1};
        let obj2 = JSON.parse(JSON.stringify(obj1));**
    

    法三:扩展运算符

        let obj1={count:1,name:'grace',age:1};
        let {...obj2} = obj1;
    

    可以实现数组和对象的深拷贝

    function deepCopy(obj){
            let result = Array.isArray(obj)?[]:{};  
            if(obj && typeof obj === 'object'){ 
                for(let key in obj){
                    if(obj.hasOwnProperty(key)){
                        if(obj[key]&&typeof obj[key]==='object'){
                            result[key]=deepCopy(obj[key]);
                        }else{
                            result[key]=obj[key];
                        }
                    }
                }
            }
            return result;
        }
    

    我们还可以借用JQ的extend方法。

    注意:ES6新增了Object.assign() 方法

  • 相关阅读:
    不同浏览器的JS如何兼容?
    过滤器如何配置(javax.servlet.Filter)?
    hibernate中 dialect,lazy,inverse,cascade属性的用途?
    json注记
    php: $$str
    MySql计算字段的长度
    封装一个获取变量准确类型的函数
    JavaScript如何创建一个对象
    python+selenium自动登录163邮箱
    获取cookie
  • 原文地址:https://www.cnblogs.com/princeness/p/11664959.html
Copyright © 2011-2022 走看看