数组和对象的深拷贝和浅拷贝的方法

数组和对象的深拷贝、浅拷贝方法有所不同,以下是常见的实现方式:

 

一、浅拷贝方法(数组和对象通用/专用)

 

浅拷贝只复制表层数据,嵌套的引用类型仍共享内存。

 

1. 数组的浅拷贝

 

- 扩展运算符(...): const arrCopy = [...originalArr]; 

- Array.prototype.slice(): const arrCopy = originalArr.slice(); 

- Array.prototype.concat(): const arrCopy = [].concat(originalArr); 

 

2. 对象的浅拷贝

 

- 扩展运算符(...): const objCopy = {...originalObj}; 

- Object.assign(): const objCopy = Object.assign({}, originalObj); 

 

二、深拷贝方法(数组和对象通用/专用)

 

深拷贝会复制所有嵌套数据,原数据和拷贝数据完全独立。

 

1. 通用方法(数组和对象均可)

 

- JSON.parse(JSON.stringify()):

简单易用,但有局限性(不支持函数、Symbol、循环引用等)。

示例: const deepCopy = JSON.parse(JSON.stringify(original)); 

- 递归实现:

自定义函数遍历所有属性,对引用类型递归拷贝,可处理复杂场景。

示例:

function deepClone(obj) {

  if (obj === null || typeof obj !== 'object') return obj;

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

  for (let key in obj) {

    if (obj.hasOwnProperty(key)) {

      copy[key] = deepClone(obj[key]);

    }

  }

  return copy;

}

 

 

2. 其他工具方法

 

- Lodash库的_.cloneDeep():

成熟可靠,支持各种数据类型(推荐实际开发使用)。

示例: const deepCopy = _.cloneDeep(original); 

 

总结

 

- 浅拷贝适合无嵌套的简单数据,实现简单(扩展运算符、slice等)。

- 深拷贝适合有嵌套引用类型的数据,复杂场景推荐用 Lodash 的  _.cloneDeep ,简单场景可临时用  JSON.parse(JSON.stringify()) (注意其局限性)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Komorebi_9999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值