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

    浅拷贝----------------------------------------------------------------------

    var sourceObj = {
        a:1,
        b:{
          c:2,
          d:{i:{h:67},j:['t','y','u']}
        },
        c:[1,2,4,{g:{f:5}}]
      }
      var targetObj = {}
      function deepCopy(sourceObj,targetObj){
        for(let key in sourceObj){
          let item = sourceObj[key]
          if(item instanceof Array){
             targetObj[key] = []
             deepCopy(item,targetObj[key])
          }else if(item instanceof Object){
            targetObj[key] = {}
            deepCopy(item,targetObj[key])
          }else{
            targetObj[key] = sourceObj[key]
          }
        }
      }
      function shallow(sourceObj,targetObj){
        for(let key in sourceObj){
          targetObj[key] = sourceObj[key]
        }
      }
      deepCopy(sourceObj,targetObj)
      sourceObj.b.d = [] 
      console.log(targetObj)
      console.log(sourceObj)

    深拷贝--------------------------------------------------

    let obj1 = {
    age: 10,
    sex: "男",
    car: ["奔驰", "宝马", "特斯拉", "奥拓"],
    dog: {
    name: "大黄",
    age: 5,
    color: "黑白色"
    }
    };

    let obj2 = {};//空对象
    //通过函数实现,把对象a中的所有的数据深拷贝到对象b中
    // use recursion
    function deepCopy(obj,targetObj){
    for (let key in obj){
    let item = obj[key];
    if (item instanceof Array){//if array
    targetObj[key] = [];
    deepCopy(item,targetObj[key]);
    }else if (item instanceof Object){//if object
    targetObj[key] = {};
    deepCopy(item,targetObj[key]);
    }else {//normal attribute
    targetObj[key] = obj[key];
    }
    }
    }
    deepCopy(obj1,obj2);

    兼容低版本浏览器----------------------------------------------------

    a = [2,3];
    b = {i:3}
    c = function () {
    aaa = 1;
    }
    function deepCopy(a) {
    let obj;
    if(Object.prototype.toString.call(a) === '[object Array]') {
    obj = []
    for (let i = 0; i < a.length; i++) {
    obj.push(deepCopy(a[i]));
    }
    } else if(Object.prototype.toString.call(a) === '[object Object]') {
    obj = {}
    for (let i in a) {
    obj[i] = deepCopy(a[i]);
    }
    } else {
    return a;
    }
    return obj;
    }
    console.log(deepCopy(c))

  • 相关阅读:
    [数据结构]线性表
    对C语言中指针的一些新认识
    Qt做动画旋转旋转图片
    延时程序执行Qt
    关于部分网页打不可的问题
    关于QString中的arg()函数使用方法
    Qt5.3.0 for Android开发环境配置
    QMenu,contextmenuevent,窗体透明
    Qt自定义窗体,边框,圆角窗体
    一个良好的团队
  • 原文地址:https://www.cnblogs.com/gxw123/p/13051010.html
Copyright © 2011-2022 走看看