经过小编之前关于JavaScript深拷贝实现方式的介绍,大家已经知道深拷贝能够实现真正意义上的数组和对象的拷贝。其实使用内置对象JSON虽然简答,但不能将对对象的方法深拷贝,因此使用递归的方式就是最实用的,本文介绍使用递归的方式实现深拷贝的原理及具体实现。

1、实现原理:

使用递归的方式实现数组、对象的深拷贝。

先判断各个字段类型,然后用递归解决嵌套数据。

判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝。

进行深拷贝的不能为空,并且是对象或者是数组。

2、具体实现:function deepClone(obj){

let objClone = Array.isArray(obj) ? [] : {};

if (obj && typeof obj === 'object') {

for(let key in obj){

if (obj[key] && typeof obj[key] === 'object'){ //判断对象的这条属性是否为对象

objClone[key] = deepClone(obj[key]); //若是对象进行嵌套调用

}else{

objClone[key] = obj[key]

}

}

}

return objClone; //返回深度克隆后的对象

}

以上就是使用递归的方式实现深拷贝的原理及具体实现,希望能对你有所帮助。更多js学习推荐:js教程。

python深拷贝实现原理,js递归实现深拷贝相关推荐

  1. python中copy模块的使用,深拷贝和浅拷贝

    python中copy模块的使用,深拷贝和浅拷贝 文章目录: 一.copy模块的介绍 1.copy模块 二.copy模块的使用 拓展说明: 1.id( )函数的使用 2.is和== 的区别 pytho ...

  2. python中的引用、浅拷贝和深拷贝

    在python中,有一句话:"一切皆为对象,一切皆为对象的引用",所以 只要记住这句话就很容易清楚python中的引用.浅拷贝和深拷贝了. 1. 引用 python中的引用是经常使 ...

  3. Python天天美味(22) - 拷贝对象(深拷贝deepcopy与浅拷贝copy)

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...

  4. 【Python基础】对象的浅拷贝与深拷贝

    Python的赋值操作一般都是存储对象的引用,而不是对象的拷贝.因为如果直接对对象进行拷贝,那么运行将会比较缓慢,而且我们实际开发大部分场景都是希望引用对象而不是拷贝对象.当然了,如果你明确要求拷贝, ...

  5. JS中的深拷贝与浅拷贝

    刚看完JS中的深浅拷贝,来记录分享一番,一起来开心的掉发吧. 首先了解深浅拷贝之前来看看JS中的几种数据类型,分别有String.Number.Boolean.undefined.null.Objec ...

  6. 理清JS中的深拷贝与浅拷贝

    作者:Manjula Dube译者:前端小智来源:Medium 为了保证的可读性,本文采用意译而非直译. 浅拷贝是对象的逐位复制.创建一个新对象,该对象具有原始对象中值的精确副本.如果对象的任何字段是 ...

  7. Python中的对象引用、浅拷贝与深拷贝

    最近项目中遇到一个Python浅拷贝机制引起的bug,由于对于Python中对象引用.赋值.浅拷贝/深拷贝机制没有足够的认识,导致调试了很久才发现问题,这里简单记录一下相关概念. 在Python的设计 ...

  8. js中的深拷贝和浅拷贝区别

    js中的深拷贝和浅拷贝与值传递和引用传递有着些许的关联,都是根据堆栈中数据的储存来传递数据. 下面主要说一下我对深拷贝和浅拷贝的理解: 简单举个例子来说明:当我们声明一个a变量并且赋值,并且让b等于a ...

  9. js 数组对象深拷贝

    深拷贝和浅拷贝的区别 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力 为什么要使 ...

最新文章

  1. python 字典
  2. PCB常见的拓扑结构 (转)
  3. VMware 完成 27 亿美元的 Pivotal 收购 | 云原生生态周报 Vol. 34
  4. linux指令popd,Linux切换目录pushd、popd、dirs命令
  5. javascript 面向对象编程小记
  6. VS.Net 2003/VC6.0常用快捷键集合
  7. Android原生系统API自带dp、px、sp单位转换
  8. 使用.NET Core 3进行Linux编程:第3章
  9. JavaScript中的逗号运算符
  10. hibernate框架搭建与使用
  11. Linux下USB转串口的驱动【转】
  12. 一维热传导方程求数值解
  13. TCP/IP常见攻击手段
  14. Android studio开发Android图灵智能聊天机器人,课程设计报告
  15. dismiss和ignore区别_词汇辨析:dismiss, discharg, expell, resign的区别
  16. Python数据可视化 Pyecharts 制作 Timeline 时间轴组件
  17. BC61 金字塔图案
  18. 被病毒感染后隐藏文件夹的隐藏属性变灰(不可修改)的解决办法!
  19. Opengl ES之PBO
  20. 【物联网树莓派毕设04】Arduino实现电梯及人脸识别门禁

热门文章

  1. python设置单元格宽度_Python xlwt-访问现有单元格内容,自动调整列宽
  2. 写出一段代码将链表中的两个节点位置互换位置_面试 leetcode 算法专题系列(二)—— 链表...
  3. 用多模态信息做 prompt,解锁 GPT 新玩法
  4. 开源词法分析工具LAC重大升级!打造属于自己的个性化分词器!
  5. Shield——开源的移动端页面模块化开发框架
  6. 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景
  7. 阿里P8架构师谈:大数据架构设计(文章合集)
  8. 论文浅尝 | TEQUILA: 一种面向时间信息的知识问答方法
  9. 清华CrossWOZ,助你徒手搭建任务导向对话系统
  10. 专家:人工智能开始对现实世界产生重大影响​​