Please enable JavaScript.
Coggle requires JavaScript to display documents.
深拷贝 - Coggle Diagram
深拷贝
存在的问题
层级过深的情况下容易爆栈
1.用尾递归解决递归层级过深的爆栈问题
尾递归不适用与深拷贝的场景,无法实现
抛开递归,使用其他遍历方法,如广度优先遍历树,来解决爆栈问题
需考虑除数组和对象外其他的引用型数据结构
Set和Map
用forOf遍历
weakSet和WeakMap
直接进行复制,暂不做特殊考虑
没有遍历方法,无法对其进行遍历
使用场景单一,一般情况没有深拷贝的场景
循环引用和引用丢失问题
性能比较
3 约等于 1 > 4 > 2
在大多数情况下,方法3的性能都优于其他,可主要使用
4的性能较低,是因为要判断对象是否缓存,对象越多性能越低,所以只适用于要求拷贝后保持引用关系以及循环引用的情况
较简单的方法
方法1:浅拷贝+递归
方法2: JSON.stringify转字符串复制再转回来
最简单,但性能也最低
解决的方法
方法3:将嵌套对象横向看做一颗树,用广度优先遍历+浅拷贝,解决爆栈问题
方法4:维护一个去重数组保存遍历到的引用型数据,在遍历时辨别并使用,解决循环引用和引用丢失问题