首页 > 其他分享 >手搓深拷贝

手搓深拷贝

时间:2023-07-26 14:12:38浏览次数:52  
标签:name oldObj age newObj key 拷贝 sayhi

手搓深拷贝

const obj = {
  name: "tom",
  age: 19,
  hobby: ["篮球", "排球"],
  sayhi() {
    console.log("sayhi");
  },
  info:{
    name:'jerry',
    age: 20
  }
};
const o = {};
//在写Object和Array的判断条件时,数组必须写在对象的前面。因为数组也是一种对象
function fn(newObj, oldObj) {
  for (const key in oldObj) {
    if (!newObj[key]) {
      // Array
      if (oldObj[key] instanceof Array) {
        newObj[key] = []
        fn(newObj[key], oldObj[key]);
      }
      // Object
      else if(oldObj[key] instanceof Object) {
        newObj[key] = {}
        fn(newObj[key], oldObj[key]);
      }
      else {
        newObj[key] = oldObj[key];
      }
    }
  }
}
fn(o, obj);
o.hobby[0] = '乒乓球'

o.info.age = '22'
console.log(o);
/*{
  name: 'tom',
  age: 19,
  hobby: [ '乒乓球', '排球' ],
  sayhi: {},
  info: { name: 'jerry', age: '22' }
}*/
console.log(obj);
/*{
  name: 'tom',
  age: 19,
  hobby: [ '篮球', '排球' ],
  sayhi: [Function: sayhi],
  info: { name: 'jerry', age: 20 }
}*/

标签:name,oldObj,age,newObj,key,拷贝,sayhi
From: https://www.cnblogs.com/doud/p/17582297.html

相关文章

  • 传统IO过程以及零拷贝简单介绍
    传统IO过程整个IO过程涉及到三个部分,分别是用户缓冲区,内核缓冲区(PageCache)以及硬件。用户态CPU发起IO请求,即发起read()系统调用,随后进程阻塞,用户态切换到内核态。内核态DMA发起IO请求与硬件进行DMA拷贝到内核缓冲区中,之后内核缓冲区与用户缓冲区进行CPU拷贝,至此read()函数调用......
  • TypeScript的深拷贝与浅拷贝
    今天在开发过程中遇到深拷贝与浅拷贝的问题constuserData1:number[][]=this.dataMangager.getUserDataMap();该行代码中的userData1 是一个指向 this.dataMangager.getUserDataMap() 返回的二维数组的引用。当 this.dataMangager.getUserDataMap() 返回的二维数组......
  • java深浅拷贝
    对于Java拷贝的理解在java语言中,当我们需要拷贝一个对象的时候,常见的会有两种方式的拷贝:深拷贝和浅拷贝。浅拷贝只是拷贝了原对象的地址,所以原对象的任何值发生改变的时候,拷贝对象的值也会随之而发生变化。拿地址。深拷贝则是拷贝源对象的所有值而不是地址,所以即源......
  • java list 深拷贝
    JavaList深拷贝的实现方法概述在Java开发中,List是一个常用的集合类型,它可以存储多个元素。有时我们需要对List进行复制,得到一个全新的副本,即深拷贝。本文将介绍如何在Java中实现List的深拷贝。流程下面是实现JavaList深拷贝的步骤:步骤操作1创建一个新的List对象......
  • SD卡分区 与 固件拷贝
    参考资料:IMX_LINUX_USERS_GUIDE.pdfCopyingthefullSDcardimage可以制作一个SD卡镜像,SD卡镜像是包含分区,分区内存放uboot、kernelimage、设备树、根文件系统,一次性拷贝到SD卡中sudoddif=<imagename>.wicof=/dev/sdxbs=1M&&sync 整个SD卡的内容被SD卡镜像替......
  • 如何导出 1Password 密码库拷贝到另个1password账户
    导出目前登录名为1pass账户选择所有项目-》导出-》你的账号名导出格式选择1PUX会出现一个名为1PasswordExport-TCETPFBRCREDJF7UKOT3TY2BCE-20230723-133048.1pux文件导入目前登录名为2pass账户选择导入-》从文件选择刚刚生成的名为1PasswordExport-TCETPFBRCREDJF7UK......
  • 拷贝构造函数 和 移动构造函数 深拷贝
    采用了深拷贝的方式,obj2 和 obj3 的 data 成员变量指向不同的内存空间,因此可以独立地释放资源而不会出现重复释放的问题.classMyClass{public:int*data;intsize;//默认构造函数MyClass():data(nullptr),size(0){}//拷贝构造函数(深拷......
  • 拷贝构造函数 和 移动构造函数的 浅拷贝
    classMyClass{public:int*data;//默认构造函数MyClass():data(nullptr){}//拷贝构造函数(浅拷贝)MyClass(constMyClass&other):data(other.data){}//移动构造函数(浅拷贝)MyClass(MyClass&&other)noexcept:data(other.data......
  • 《C++》拷贝和替换算法
    copy复制容器元素到新容器 vector<int>v3; v3.resize(v1.size()); copy(v1.begin(),v1.end(),v3.begin());replace元素值替换 replace(v3.begin(),v3.end(),0,100);//replace(开始,结束,旧值,新值);replace_if条件元素值替换classFindCondition{public: booloperator()(......
  • 伪负载均衡(拷贝多个流程
    数厂代码,未实现伪负载均衡//伪负载均衡/*;(()=>{letnodes=JSON.parse(JSON.stringify(data.nodes));letedges=JSON.parse(JSON.stringify(data.edges));//排查特殊节点并记录letstart_node=null,......