什么是深拷贝
深拷贝是指在拷贝一个对象时,不仅仅要拷贝该对象,还要递归地拷贝该对象的所有子对象。这样拷贝出来的对象与原始对象完全独立,修改一个对象不会影响另一个对象。
在 TypeScript 中,对象的深拷贝被广泛应用于复制对象或在对象之间传递数据。
实现深拷贝的方法
方法一:手写递归函数
手写递归函数可以实现对象的深拷贝,步骤如下:
- 如果对象是 null 或 undefined,直接返回该对象
- 如果对象是基本类型,如 string、number、boolean 等,直接返回该对象
- 如果对象是日期对象,返回一个新的日期对象,并将原日期对象的时间戳复制到新日期对象中
- 如果对象是数组或类数组对象,遍历该数组或类数组对象,递归调用深拷贝函数,并返回复制后的数组或类数组对象
- 如果对象是普通对象,遍历该对象的所有属性,递归调用深拷贝函数,并返回复制后的对象
代码示例:
-- -------------------- ---- ------- -------- ------------- ----- --- - -- ---- --- ---- -- ------ --- --- --------- - ------ ---- - -- ---- ---------- ----- - ------ --- -------------------- - -- -------------------- - ----- ------- - --- --------------- -- - ---------------------------- --- ------ -------- - ----- ------- - --- --- ------ --- -- ---- - -- ------------------------- - ------------ - ------------------- - - ------ -------- -
方法二:使用 Lodash 库
Lodash 是一个工具库,其中包含了众多实用的方法,包括深拷贝方法 cloneDeep
。使用 Lodash 库可以大大简化深拷贝的操作,同时 Lodash 库的代码经过优化,性能较高。
代码示例:
import cloneDeep from 'lodash/cloneDeep'; const obj = {name: '张三', age: 20, address: {city: '北京', area: '海淀区'}}; const copyObj = cloneDeep(obj); console.log(copyObj); // 输出 {name: '张三', age: 20, address: {city: '北京', area: '海淀区'}}
总结
对象的深拷贝在 TypeScript 中十分常用,选择合适的深拷贝方法对代码效率和性能都有很大的影响。手写递归函数能够实现对象的深拷贝,但代码较复杂。借助 Lodash 库,可以快速且高效地实现深拷贝操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cc69ef5ad90b6d04280b33