前端手写(三)——手写深拷贝

news/2025/1/12 12:48:19/

一、写在前面
深拷贝就是对对象的深度拷贝,假如我们对象中的字段值任然是对象,如果使用浅拷贝,则只能拷贝对象的地址。实现深拷贝存在三种方法:
1、使用JSON.stringifyJSON.parse方法
2、手写一个深拷贝函数。
3、使用第三方库lodash
下面我们将详细总结一下第一种和第二种。
二、JSON.stringify和JSON.parse方法

const obj = {name: 'Jack',address: {x: 100,y: 200}
}
let copyObj = JSON.parse(JSON.stringify(obj))
console.log(copyObj)    //{ name: 'Jack', address: { x: 100, y: 200 } }
console.log(copyObj.address === obj.address)  //false

三、手写深拷贝函数

function deepCopy(obj, cache = new WeakMap()) {if (obj === null || typeof obj !== 'object') return obj //原始值if (obj instanceof Date) return new Date(obj) //日期值if (obj instanceof RegExp) return new RegExp(obj) //正则if (cache.has(obj)) return cache.get(obj) //防止循环引用情况let copyObj = new obj.constructor() //创建一个和obj类型一样的对象cache.set(obj, copyObj) //放入缓存中for (let key in obj) {if (obj.hasOwnProperty(key)) {copyObj[key] = deepCopy(obj[key], cache)}}return copyObj
}const obj = {name: 'Jack',address: {x: 100,y: 200}
} 
obj.a = obj
let copyObj = deepCopy(obj)
console.log(copyObj)
console.log(copyObj.address === obj.address)  //false

http://www.ppmy.cn/news/139280.html

相关文章

FS162液晶手写板擦写专用芯片

特性 FEATURES应用 APPLICATIONS技术指标 SPECIFICATIONS参数 最小值 典型值 最大值 单位温度范围 -25 25 85 ℃工作电压 2.2 3.0 5.0 V擦写电压 25 40 V待机电流 0.01 0.05 uA工作电流 3 20 mA● 擦写脉冲电压可调(外置调压电阻)工作电压范围宽&#xf…

印象智能手写板体验:低成本手写方案

电子时代有好多人还保持着手写记录的习惯,当然要保证信息安全的话,还是把手写文字转化为电子笔记更稳妥。目前有这几种解决方案:最简单的,在纸上记录后用手机扫描,然后 OCR 识别为电子格式;或者买一个电子纸…

手写数字识别(1)

#3.6.1 MNIST数据集 MNIST数据集是由0到9的数字图像构成的。训练图像有6万张,测试图像有1万张,这些图像可以用于学习和推理。MNIST数据集的一般使用方法是,先用训练图像进行学习,再用学习到的模型度量能在多大程度上对测试图像进行…

OCR手写字体生成数据

简述: 根据CASIA的HWDB1.X的手写字符生成了一些带有字符级标注、行级别标注的文本数据,分享给需要的同学。 生成基于不同人的字体、字体大小、行间字体间隔、旋转角度、文本布局的文字贴图。 生成素材:共65种贴图背景, 由420位手写…

【C++】指针 - 定义和使用,所占内存空间,空指针,野指针,const 修饰指针,指针和数组,指针和函数

文章目录 1. 定义和使用2. 所占内存空间3. 空指针4. 野指针5. const 修饰指针6. 指针和数组7. 指针和函数 1. 定义和使用 数据类型 * 变量名; 指针的作用是,可以通过指针间接访问内存。 内存编号是从 0 开始记录的,一般用十六进制数字表示。可以利用指…

Hibernate框架【四】——基本映射——多对一和一对多映射

系列文章目录 Hibernate框架【三】——基本映射——一对一映射 基本映射——多对一和一对多映射 系列文章目录前言一、多对一映射是什么?1.案例:现在有两个实体User实体和Group,其中多个User属于一个Group,表现出多对一的关系。①…

Nginx通过用户IP获取所在国家及地理位置

文章目录 前言一、GeoLite2-Country是什么?二、使用步骤2.1 下载GeoLite2-Country数据库文件,并导入Nginx2.2 配置Nginx模块2.3 使用变量来获取国家信息2.4 验证配置 总结 前言 Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。它最初设计目的是…

win11的docker-desktop安装

1、docker-desktop安装,参考 Windows系统上的Ubuntu wsl使用以及wsl连接远程服务器指南 - 知乎 a、官网直接下载安装(2个地址任选) https://www.docker.com/get-started/ https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20In…