js深拷贝、js使用递归实现深拷贝

相信看到这篇文章之前你应该多多少少了解过什么是深拷贝了为什么要什么拷贝了 这里就不介绍什么是深拷贝、浅拷贝了

最优解深拷贝方法:递归

这里为了方便直接在vue的页面里面演示了,在其他js文件中使用注意下this

  mounted() {const obj = {str: "字符串",num: 6,nu: null,reg: /^1[34578]\d{9}$/,children: {str: "字符串2",},fun() {console.log("函数");},};console.log(obj, "obj");let newObj = this.deepClone(obj);//调用递归函数传入需要拷贝的对象console.log(newObj, "newObj");obj.str = "修改后的字符串";const copyObj = obj;console.log(copyObj, "copyObj");//修改obj中的str之后copyObj中的str没有变化},

 

 

递归函数:

如果是普通js里面记得去掉this

    deepClone(obj) {if (typeof obj !== "object" || obj == null) {return obj;//如果传入的参数不是对象类型或者数组类型的数据直接返回原数据}let newObj = obj instanceof Array ? [] : {};//定义一个变量,当它是数组的时候赋予初始值空对象否则为空对象for (let key in obj) {//使用for in循环遍历是因为他不仅可以遍历数组还能遍历对象if (obj.hasOwnProperty(key)) {//使用对象.hasOwnProperty方法判断是否为对象自身的属性而非原型上的属性newObj[key] = this.deepClone(obj[key]);//将传入的对象参数递归调用赋值给新的对象,//此处直接递归调用不用判断是因为在深拷贝函数里面已经判断过,如果传入参数不是对象深拷贝函数将直接返回原数据,否则将继续递归赋值}}return newObj;},

对象里面没有函数、正则等一些特殊数据的情况下使用简单的深拷贝方法:

JSON.parse(JSON.stringify())

let jsonDeepClone = JSON.parse(JSON.stringify(obj))console.log(jsonDeepClone);

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

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

相关文章

Elasticsearch【集群概念、搭建集群】(七)-全面详解(学习总结---从入门到深化)

目录 Elasticsearch集群_概念 Elasticsearch集群_搭建集群 Elasticsearch集群_概念 在单台ES服务器上,随着一个索引内数据的增多,会产生存储、效率、安全等问题。 1、假设项目中有一个500G大小的索引,但我们只有几台200G硬盘 的服务器&am…

windows凭据收集

实验目的 掌握windows凭据的收集方法 实验环境 windows server 2008 实验工具 mimikatz procdump 实验原理 用户凭证获取,一般是指 ntlm hash 或者可以直接利用的明文密码。 实验内容 使用mimikatz获取用户信息 使用procdump获取当前用户的明文密码 实验步骤…

RabbitMQ在SpringBoot中的高级应用(2)

过期时间 1.单独的设置队列的存活时间,队列中的所有消息的过期时间一样 Bean//创建交换机public DirectExchange ttlQueueExchange(){// 交换机名称 是否持久化 是否自动删除return new DirectExchange("ttl_queue_log",true,false);}Bean//创建队列publ…

若依@DataScope

DataScope : 根据sys_role 中的 data_scope中的值,来设置数据该怎么过滤,, data_scope 取值: 1 : 不需要过滤2 : 自定义过滤 : 根据 sys_role_dept 这个表关联出来的 dept_id 过滤…

函数指针数组的概念和应用

函数指针数组 是什么? 函数指数组是存放函数指针的数组 int Add(int x, int y) {return x y; }int Sub(int x, int y) {return x - y; }int Mul(int x, int y) {return x * y; }int Div(int x, int y) {return x / y; }int main() {int(*parr[4])(int, int) { …

Ubuntu 20.04 LTS 安装 nvidia 驱动 + cuda 11.8 从开始到放弃!

升级 sources.list # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restri…

回归预测 | MATLAB实现WOA-DNN鲸鱼算法优化深度神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现WOA-DNN鲸鱼算法优化深度神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-DNN鲸鱼算法优化深度神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现WOA-DNN鲸鱼算法优化深度…

什么是Qt Widgets?一组创建经典桌面应用UI的界面组件!

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 Qt Widgets模块提供…

spring-依赖注入的方式

setter注入-可选依赖注入 简单类型&#xff1a; 1.配置类 2.set方法 引用类型&#xff1a; 构造器注入-强制依赖注入 简单类型&#xff1a; 引用类型&#xff1a; 通过有参构造&#xff0c;获得需要注入的对象 <construct-arg />标签中name属性中填写的时构造方…

Linux--进程

什么叫做进程&#xff1f; 程序加载到内存就叫进程&#xff08;看不懂是吧&#xff0c;看下面更详细一些&#xff09; 进程对应的代码和数据进程对应的PCB结构体

Stable Diffusion系列课程上:安装、提示词入门、常用模型(checkpoint、embedding、LORA)、放大算法、局部重绘、常用插件

文章目录 一、Stable Diffusion简介与安装二、文生图&#xff08;提示词解析&#xff09;2.1 提示词入门2.2 权重2.3 负面提示词&#xff08; Negative prompt&#xff09;2.4 出图参数设置2.5 新手念咒方法 三、图生图3.1 图生图入门3.2 随机种子解析3.3 图生图拓展 四、模型4…

【C++进阶】bitset位图介绍以及模拟实现

文章目录 位图介绍一、位图的引入二、位图的概念 位图模拟实现一、构造函数二、set&#xff0c;reset&#xff0c;test函数三、代码测试四、完整代码 位图介绍 一、位图的引入 先来看下边一道面试题&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符…