关于Js深拷贝的三种方法详细讲解

目录

前言

一、pandas是什么?

二、使用步骤

1.利用函数递归来实现深拷贝

2.利用引入lodash包

3.利用JSON字符串转换

总结


前言

当涉及到JavaScript数据拷贝的时候,深拷贝是一个非常关键的概念。在JavaScript中,对象和数组被认为是引用类型,因此在进行赋值操作时,实际上是复制的引用而不是真正的拷贝。这就意味着当我们修改或操作某个拷贝后的对象或数组时,原始对象或数组也会被影响。

为了解决这个问题,我们可以使用深拷贝的方法来创建一个完全独立的副本,以便我们可以自由地修改或操作它,而不会影响到原始的数据。

在本文中,我们将详细讲解三种常用的JavaScript深拷贝方法,分别是递归拷贝、JSON序列化和使用第三方库。通过学习这些方法,我们将能够更好地理解深拷贝的原理以及如何在实际开发中应用它们。

让我们开始探索这三种方法,深入了解它们的优缺点以及适用场景。无论你是初学者还是有经验的开发者,相信本文都能对你有所帮助。让我们一起来掌握深拷贝的技巧,提升我们的JavaScript编程能力吧!


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么要用深拷贝?

二、使用步骤

1.利用函数递归来实现深拷贝

了解什么是递归函数:

如果一个函数在内部可以调用其本身,那么这个函数就是递归函数
 简单理解:函数内部自己调用自己, 这个函数就是递归函数
 递归函数的作用和循环效果类似
一个简单的递归函数:
 let u = 1;function pan() {console.log(`今天星期${u}`);if (u >= 7) {return;}u++;pan();}pan();

 

利用递归解释深拷贝问题:

 function deepColy(newobj, OldObj) {for (let k in OldObj) {if (OldObj[k] instanceof Array) {newobj[k] = [];deepColy(newobj[k], OldObj[k]); //再利用递归调用一下函数  []  ["小明", "小曹"]}if (OldObj[k] instanceof Object) {newobj[k] = {};deepColy(newobj[k], OldObj[k]); //再利用递归调用一下函数  {}   hoae: "河北", hoon: "邯郸",} else {//newobj[k]  创建   k 是属性名newobj[k] = OldObj[k];}}}

 

 总结:

当一个函数调用自身时,它会创建一个新的函数执行上下文,并将其添加到执行栈中。递归函数通常会包含一个或多个基本情况(base cases),用于终止递归的过程,并包含一个递归情况(recursive case),用于调用自身并不断进行计算。

递归在实现深拷贝时非常有用。在深层嵌套的对象或数组中,我们可以使用递归来遍历每个属性或元素,并进行拷贝操作。递归函数可以在遇到对象或数组时再次调用自身,以实现对嵌套层级的完全拷贝。

需要注意的是,在使用递归时,我们需要确保设置好基本情况,以避免进入无限循环的情况。此外,递归的性能可能不如迭代方式高效,因为每次调用递归函数都会创建新的函数执行上下文,消耗内存和处理时间。

2.利用引入lodash包

lodash

给大家说一下关于lodash如何使用:cmd下载方法

下载Lodash非常简单,可以使用npm(Node Package Manager)或者yarn来下载。

使用npm下载Lodash的命令是:

npm install lodash

使用yarn下载Lodash的命令是:

yarn add lodash

以上命令会自动从npm仓库下载Lodash,并将其添加到项目的依赖中。

如果你想下载Lodash的特定版本,可以使用以下命令:

使用npm下载特定版本的Lodash:

npm install lodash@版本号

使用yarn下载特定版本的Lodash:

yarn add lodash@版本号

例如,如果你想下载Lodash的4.17.21版本,可以使用以下命令:

使用npm下载Lodash 4.17.21:

npm install lodash@4.17.21

使用yarn下载Lodash 4.17.21:

yarn add lodash@4.17.21

下载完成后,你就可以在你的项目中引入和使用Lodash了。例如:

const _ = require('lodash');// 使用Lodash的函数
const result = _.capitalize('hello world');
console.log(result); // 输出:Hello world

第二利用引入js包来解决 

我已经为大家下载好 需要的私信我 

也可以去 https://www.lodashjs.com/

 <script src="../第四天/lodash.min.js"></script><script>const obj = {uname: "小明",age: 19,hooby: ["小明", "小曹"],finally: {hoae: "河北",hoon: "邯郸",},};const mang = _.cloneDeep(obj);console.log(mang);obj.finally.hoae = "四川";console.log(obj);console.log("_------------------------------------");

该处使用的url网络请求的数据。

3.利用JSON字符串转换

利用JSON字符串转换实现深拷贝的过程可以分为以下几个步骤:

  1. 首先,将需要拷贝的对象转换成JSON字符串。
const obj = { foo: 'bar', nested: { baz: 'qux' } };
const jsonString = JSON.stringify(obj);

  1. 然后,将JSON字符串转换回对象,这将创建一个新的对象。
const newObj = JSON.parse(jsonString);

  1. 现在,newObj是原始对象的深拷贝。你可以对newObj进行修改,而不会影响到原始对象。
newObj.foo = 'baz';
newObj.nested.baz = 'quux';console.log(obj.foo); // 输出:'bar'
console.log(obj.nested.baz); // 输出:'qux'
console.log(newObj.foo); // 输出:'baz'
console.log(newObj.nested.baz); // 输出:'quux'

需要注意的是,使用JSON字符串转换方法实现深拷贝有一些限制。例如,如果对象中包含函数、不可枚举的属性、循环引用等特殊情况,JSON.stringify()可能会在转换过程中丢失或无法正确处理这些数据。在这种情况下,你可能需要使用其他深拷贝方法,如递归深拷贝或第三方库。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结构体(structure)的认识

前言——————希望现在在努力的各位都能感动以后享受成功的自己&#xff01; 今天我们来了解了解一下结构体&#xff0c;结构体又有什么奥妙呢&#xff0c;废话不多说&#xff0c;何为结构体呢&#xff1f;------->结构是⼀些值的集合&#xff0c;这些值称为成员变量。结…

每日算法打卡:子矩阵的和 day 8

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 题目分析示例代码 原题链接 796. 子矩阵的和 题目难度&#xff1a;简单 题目描述 输入一个 n 行 m 列的整数矩阵&#xff0c;再输入 q 个询问&#xff0c;每个询问包含四个整数…

即时设计:设计稿与PPT完美结合,让您的创意作品更具影响力

PPT助手 更多内容 在设计领域&#xff0c;将设计稿与PPT结合起来&#xff0c;可以让您的作品更具吸引力和影响力。为了满足这一需求&#xff0c;我们向您推荐一款强大的设计工具&#xff0c;它可以将设计稿导出为PPT文件&#xff0c;支持线上预览和编辑&#xff0c;让您的创意…

2024年大数据不完全预测

人工智能的进步可能是2024年的主要推动力&#xff0c;也凸显出大数据的挑战——如何存储、管理、管理和使用大数据——从未如此紧迫。&#xff0c;因为如果作为基石的数据失控&#xff0c;人工智能就没有意义了。当然反之亦然。 人工智能的进步可能是2024年的主要推动力&#…

【leetcode】力扣算法之相交链表【中等难度】

题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数…

如何解决海量数据的问题

近年来&#xff0c;高并发、分布式以及大数据成了后端开发者绕不开的话题&#xff0c;招聘软件上几呼都写着有高并发、大数据等项目经历优先时。很多人实际项目往往都是 CRUD&#xff0c;也没机会接触到这些场景啊。 但是&#xff0c;有位伟人曾经说过&#xff1a;没有条件&am…

并发(9)

目录 50.AQS的核心思想是什么&#xff1f; 51.AQS有哪些核心方法&#xff1f; 52.AQS定义什么样的资源获取方式&#xff1f; 53.AQS底层使用了什么样的设计模式&#xff1f; 54.什么是可重入&#xff0c;什么是可重入锁&#xff1f;他用来解决什么问题&#xff1f; 55.Ree…

小程序实现绘制图片 保存到手机

HTML <template><view><canvas canvas-id"myCanvas" :style"{height:380px,width:wWidthpx,background:#FFFFFF}"></canvas><view class"textCenter"><button click"saveCanvas">保存图片</b…

三代半导体材料有何区别

什么是半导体材料 半导体材料是制作半导体器件和集成电路的电子材料&#xff0c;是半导体工业的基础。利用半导体材料制作的各种各样的半导体器件和集成电路&#xff0c;促进了现代信息社会的飞速发展。 绝缘体、半导体和导体的典型电导率范围 半导体材料的研究开始于19世纪初…

什么是消费增值?如何做到增值?

在当今的商业世界&#xff0c;消费观念正在经历一场深刻的变革。传统的消费模式中&#xff0c;消费者购买商品后&#xff0c;交易即结束&#xff0c;消费者与商品的关系仅停留在使用层面。然而&#xff0c;随着消费增值模式的出现&#xff0c;这一观念正在被颠覆。这一模式将消…

React 元素拖拽教程 react-dnd 实现拖拽

实现效果 下面是实际的项目中的应用&#xff0c;涉及业务逻辑代码比较繁琐&#xff0c;下文只说明其基本原理&#xff0c;有疑问的地方请留言 h5原生的拖拽处理起来过分的繁琐&#xff0c;而社区已经提供了成熟的库 react-dnd 来帮助我们实现这些细节&#xff0c;我们只需要关…

Docker 基础

文章目录 1.Docker概述2.Docker安装3.Docker与虚拟机VM4.Docker命令1.帮助命令2.镜像命令1.images2.search3.pull4.rmi 3.容器命令1.run2.ps3.rm4.start5.stop6.restart7.kill 4.常用其他命令1.后台启动容器2.查看日志&#xff08;logs&#xff09;3.查看进程信息&#xff08;t…

使用proteus进行主从JK触发器仿真失败原因的分析

在进行JK触发器的原理分析的时候&#xff0c;我首先在proteus根据主从JK触发器的原理进行了实验根据原理图&#xff0c;如下图&#xff1a; 我进行仿真&#xff0c;在仿真的过程中&#xff0c;我向电路图中添加了外部的置0/1端口&#xff0c;由此在proteus中得到下面的电路图 …

变异系数法

变异系数法是根据统计学方法计算得出系统各指标变化程度的方法&#xff0c;是直接利用各项指标所包含的信息&#xff0c;通过计算得到指标的权重&#xff0c;因此是一种客观赋权的方法。 如果这个指标的变化能够很大影响我们的对象就权重很大 需要进行预处理 指标正向化 指…

红队打靶练习:DERPNSTINK: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 目录探测 1、gobuster 2、dirsearch WEB get flag1 robots.txt /php/phpmyadmin /temporary /weblog wordpress wpscan扫描 漏洞发现 提权 系统信息收集 mysql登录 john get flag2 s…

DBSCAN聚类模型

目录 介绍&#xff1a; 一、数据 二、建模 三、评价指标 3.1metrics.homogeneity_score 3.2metrics.completeness_score 3.3metrics.v_measure_score 3.4metrics.adjusted_rand_score 3.5metrics.adjusted_mutual_info_score 3.6metrics.silhouette_score 四、画图…

假设与灵敏度分析

灵敏度分析 关系究竟有多敏感&#xff0c;就要进行灵敏度分析 如果你改变了系统参数后&#xff0c;引起这个模型&#xff08;公式&#xff09;输出的变化的程度不大&#xff0c;则说明你的模型稳定性较强&#xff08;即灵敏性较差&#xff09;&#xff0c;反之则反&#xff01…

前端-基础 常用标签-超链接标签( 锚点链接 )

锚点链接 &#xff1a; 点击链接&#xff0c;可以快速定位到 页面中的某个位置 如果不好理解&#xff0c;讲一个例子&#xff0c;您就马上明白了 >>> 这个是 刘德华的百度百科 &#xff0c;可以看到&#xff0c;页面里面有很多内容&#xff0c;那就得有个目录了 …

为什么地中海气候对葡萄最有益?

优质葡萄酒离不开优秀的葡萄品种&#xff0c;更离不开有利的风土优势。云仓酒庄的品牌雷盛红酒LEESON分享熟悉葡萄酒知识的朋友都听说过不少葡萄酒产区是被老天爷眷顾的地中海气候。 为什么地中海气候对葡萄种植最有益呢&#xff1f;云仓酒庄的品牌雷盛红酒LEESON分享因为这是一…

5g视频短信群发助力汽车销售!

视频短信群发在汽车销售中具有以下优势&#xff1a; 1.增强品牌形象&#xff1a;通过视频短信&#xff0c;可以向潜在客户展示汽车品牌形象、企业文化和价值观&#xff0c;提升品牌认知度和美誉度。 2.产品展示与介绍&#xff1a;视频短信可以用来详细介绍汽车的特点、功能和优…