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

    单层数据深拷贝:

    concat slice  Object.assign()    展开运算符...
    
    demo:
    
    let arr=[2,3,4,5];
    
    let arr1=[].concat(arr);
    
    let arr2=arr1.slice(0);
    
    let arr3=[...arr1];
    
    let arr4=Object.assign([],arr1);

    但是如果多层数据,就不行了,就是slice和concat只能实现首层深拷贝

    多层数据深拷贝可以使用JSON.stringfy JSON.parse

    let obj={name:'zhangsan',arr:[2,3,4,5],obj:{age:2,sex:'male'}};

    let obj1=JSON.parse(JSON.stringfy(obj));

    但是元素不能是undefined和function(在转换过程中会被忽略)

    深层拷贝实现使用递归:

    function deepClone(obj){
                    const targetObj=Object.prototype.toString.call(obj)=="[Object Array]"?[]:{};
                    for(let key in obj){
                        if(obj.hasOwnProperty(key)){
                            if(targetObj[key]&&typeof targetObj[key]=='object'){
                       targetObj[key]=deepClone(targetObj[key]);
                  }else{ targetObj[key]=obj[key]; } } } return targetObj; }

     也可以借助jquery的extend方法实现深拷贝:

    $.extend([deep],targetObj,obj1 [,objn]);

    deep表示是否深拷贝,为true为深拷贝,为false则为浅拷贝

    let obj={a:2,b:3,obj:{c:4,d:5}};

    let obj1=$.extend(true,{},obj);

  • 相关阅读:
    TensorFlow学习笔记--CIFAR-10 图像识别
    第二章--第二节:注释
    webbrowser
    RichViewEdit
    RichEdit
    TreeView
    RichView
    ListView
    DesktopLoader服务程序
    Delphi实现程序只运行一次并激活已打开的程序
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/10650387.html
Copyright © 2011-2022 走看看