怎么做深拷贝?

简介: 怎么做深拷贝?

深拷贝是指在拷贝对象时,不仅拷贝了对象本身,还拷贝了对象内部所有的嵌套对象,确保拷贝后的对象与原始对象完全独立,互不影响。在 JavaScript 中,可以通过以下方法来实现深拷贝:

  1. 使用 JSON 序列化和反序列化:
const deepCopy = (obj) => {
  return JSON.parse(JSON.stringify(obj));
};
// 使用方法
const originalObj = { a: 1, b: { c: 2 } };
const copiedObj = deepCopy(originalObj);
  1. 这种方法简单易行,但有一些局限性,比如无法拷贝函数、正则表达式、循环引用等特殊对象。
  2. 递归遍历对象并拷贝:
const deepCopy = (obj) => {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }
  const newObj = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      newObj[key] = deepCopy(obj[key]);
    }
  }
  return newObj;
};
// 使用方法
const originalObj = { a: 1, b: { c: 2 } };
const copiedObj = deepCopy(originalObj);
  1. 这种方法需要递归地遍历对象的所有属性,并进行拷贝,可以处理更多类型的数据,但需要注意处理循环引用的情况,以避免进入死循环。
  2. 无论使用哪种方法,深拷贝都需要考虑到各种复杂的数据类型和边界情况,以确保拷贝的对象完全独立于原始对象。
相关文章
|
4月前
|
JSON 前端开发 JavaScript
面试官:请你说下深、浅拷贝并且手写深、浅拷贝,我:你咋知道我只会这个?
面试官:请你说下深、浅拷贝并且手写深、浅拷贝,我:你咋知道我只会这个?
|
4月前
|
存储 Java Apache
【面试问题】深拷贝和浅拷贝的区别?
【1月更文挑战第27天】【面试问题】深拷贝和浅拷贝的区别?
|
10月前
面试官:深拷贝与浅拷贝有啥区别?
面试官:深拷贝与浅拷贝有啥区别?
|
6月前
|
JavaScript
一文弄懂浅拷贝和深拷贝
一文弄懂浅拷贝和深拷贝
28 0
|
9月前
|
存储 JavaScript 前端开发
深拷贝浅拷贝有什么区别?怎么实现深拷贝?
深拷贝浅拷贝有什么区别?怎么实现深拷贝?
58 0
|
10月前
|
存储 JSON JavaScript
面试常问:深拷贝和浅拷贝
在了解深拷贝和浅拷贝之前我们先简单了解一下堆和栈的概念。 堆的概念:在javaScript中,堆是用来存储地址的。比如引用数据类型的地址就是存储在堆中。 栈的概念:栈在javascript中用于存储值的。比如基本数据类型都是直接存在栈内存中的。
|
10月前
|
人工智能 JavaScript 前端开发
为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现
首先我们要明白一点,js中数据类型分为: 基本数据类型 (Number, String, Boolean, Null, Undefined, Symbol) 对象数据类型 ( Object )** 引用数据类型的值是保存在栈内存和堆内存中的对象。栈区内存保存变量标识符和指向堆内存中该对象的指针。当寻找引用值时,解释器会先寻找栈中的地址。然后根据地址找到堆内存的实体
76 0
为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现
|
11月前
|
JSON JavaScript 前端开发
【面试官系列】请讲讲你知道的关于对象和数组深、浅拷贝的一些技巧 ~(一)
【面试官系列】请讲讲你知道的关于对象和数组深、浅拷贝的一些技巧 ~(一)
|
11月前
|
Web App开发 JSON JavaScript
【面试官系列】请讲讲你知道的关于对象和数组深、浅拷贝的一些技巧 ~(二)
【面试官系列】请讲讲你知道的关于对象和数组深、浅拷贝的一些技巧 ~(二)
|
存储 JSON 缓存
前端面试:浅拷贝和深拷贝的区别?
前端面试:浅拷贝和深拷贝的区别?