考虑循环引用的深拷贝
先看下深拷贝常用的几种方式
- 使用 JSON 序列化和反序列化:通过将对象转换为 JSON 字符串,然后再将其解析为新的对象,实现深拷贝。这种方式可以处理大部分的常规对象和数组,但会忽略特殊对象的属性和方法。
- 使用第三方库:许多 JavaScript 第三方库提供了深拷贝的实现,如 lodash、jQuery 等。这些库通常提供了比原生实现更强大和灵活的方法来实现深拷贝。例如,使用 lodash 的
cloneDeep
方法可以方便地实现深拷贝。 - 那就是手撸一个了,一般在项目中可以包裹成一个hook函数提出来。下面是核心代码:
const deepClone = (obj) => {
const map = new Map()
map.set(obj, true)
const copy = (obj) => {
if (!obj || typeof obj !== 'object') {
return {}
}
// 根据情况判断用数组还是对象装
const newObj = Array.isArray(obj) ? [] : {}
for (const key in obj) {
const value = obj[key]
// 如果拷贝的是简单类型的值直接进行赋值
if (typeof value !== 'object') {
newObj[key] = value
} else {
// 如果拷贝的是复杂数据类型
//第一次拷贝后将value存入map,再次遇到说明value之前已经遍历遇到了
if (map.has(value)) {
newObj[key] = null
} else {
map.set(value, true)
newObj[key] = copy(value)
}
}
}
return newObj
}
return copy(obj)
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbaici
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01