美文网首页
JavaScript中对象深拷贝的实现方法

JavaScript中对象深拷贝的实现方法

作者: 隔壁甜言 | 来源:发表于2024-04-07 16:06 被阅读0次

1. 使用 JSON.stringify() 和 JSON.parse()

这是一种简单但有局限性的方法,适用于能够被JSON格式化处理的对象(即对象中不包含函数、循环引用、undefined、Symbol、Date对象以外的内置对象等非标准JSON类型):

//javascript
function deepCopyUsingJson(obj) {
  return JSON.parse(JSON.stringify(obj));
}

2. 使用递归函数

这种方法更通用,能够处理包含复杂嵌套和各种数据类型的对象,包括函数和循环引用(需额外处理):

//javascript
function deepCopyUsingRecursion(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }

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

  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      copy[key] = deepCopyUsingRecursion(obj[key]);
    }
  }

  return copy;
}

3. 使用Object.assign()结合递归

如果支持现代浏览器或Node.js环境,可以利用Object.assign()结合递归来实现深拷贝,但同样需要注意处理数组和循环引用:

//javascript
function deepCopyUsingAssign(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }

  if (Array.isArray(obj)) {
    return obj.map(deepCopyUsingAssign);
  }

  return Object.keys(obj).reduce((acc, key) => {
    acc[key] = deepCopyUsingAssign(obj[key]);
    return acc;
  }, {});
}

4. 使用第三方库(如Lodash的_.cloneDeep())

若项目中已集成诸如Lodash这样的工具库,可以直接使用其提供的深拷贝函数,以简化代码并确保更好的兼容性和性能:

//javascript
import { cloneDeep } from 'lodash';

const deepCopyUsingLodash = cloneDeep(obj);

相关文章

  • JS 中深拷贝的几种实现方法

    JS 中深拷贝的几种实现方法 1、使用递归的方式实现深拷贝 方法二 2、通过 JSON 对象实现深拷贝 缺点 (1...

  • JS深拷贝的实现方法

    1、使用递归的方式实现深拷贝 2、通过 JSON 对象实现深拷贝 注意:JSON对象实现深拷贝无法实现对对象中方法...

  • Javascript中的深拷贝

    JS 中深拷贝的几种实现方法 1、使用递归的方式实现深拷贝 //使用递归的方式实现数组、对象的深拷贝 functi...

  • 2018-05-14 js深拷贝

    实现深拷贝代码: 简单的实现方式:深拷贝对象还有另一个解决方法,在对象中不含有函数的时候,使用JSON解析反解析就...

  • 如何实现拷贝

    没理解深拷贝与浅拷贝的点这里 实现浅拷贝 Object.assign ES6中拷贝对象的方法,第一个参数是新对象,...

  • JavaScript深拷贝、浅拷贝

    JavaScript深拷贝、浅拷贝 浅拷贝:浅拷贝只是复制了内存地址,如果原地址中的对象改变了,浅拷贝出来的对象也...

  • JavaScript 原生js深拷贝的实现

    这次的学习深拷贝参考了子匠大大的文章:《JavaScript中对象的深拷贝》 JSON.parse()&JSON....

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • 五、面试总结(五)

    对象 拷贝(clone) 如何实现对象克隆 深拷贝和浅拷贝区别 深拷贝和浅拷贝如何实现激活机制 写clone()方...

  • 手写深拷贝

    手写深拷贝 深拷贝 深拷贝简单理解就是b是a的一份拷贝,且b中不存在a中对象的引用 深拷贝的实现 1.JSON序列...

网友评论

      本文标题:JavaScript中对象深拷贝的实现方法

      本文链接:https://www.haomeiwen.com/subject/opqtxjtx.html