js_三种方法实现深拷贝

  1. 深拷贝( 递归 )

适用于需要完全独立于原始对象的场景,特别是当对象内部有引用类型时,为了避免修改拷贝后的对象影响到原始对象,就需要使用深拷贝。

// 原始对象
const obj = { uname: 'Lily',age: 19,hobby: ['乒乓球', '篮球'],family:{baby:'老baby'}}// 新对象const o = {} // 拷贝函数function deepCopy(newObj, oldObj) {for(let k in oldObj){// 递归优先级 Array → Object// 判断对象属性是否为数组类型if(oldObj[k] instanceof Array){newObj[k] = []  // newObj[k] === o.hobbydeepCopy(newObj[k], oldObj[k])}else if (oldObj[k] instanceof Object) {newObj[k] = {}  // newObj[k] === o.familydeepCopy(newObj[k], oldObj[k])}else{// newObj[k] === o.unamenewObj[k] = oldObj[k]   }}}deepCopy(o, obj)o.age = 20o.hobby[0] = '足球'o.family.baby = '小baby' console.log(o)   console.log(obj) 

在这里插入图片描述

  1. 深拷贝( lodash )

Lodash 的 __.cloneDeep 方法可以实现深拷贝,它能够处理各种复杂的数据类型和嵌套结构。

语法规范:_.cloneDeep(value)

// 需要先在src中引入 lodash.min.js 文件
<script src="./js/lodash.min.js"></script>
<script>const obj = {uname:'Lily',age:18,hobby:['乒乓球','足球'],family:{baby: '老baby'}}const o = _.cloneDeep(obj)o.family.baby = '小baby'console.log(o)  console.log(obj) 
</script>

lodash实现深拷贝

  1. 深拷贝( JSON )

JSON.stringify() 用于将JavaScript对象或值转换成一个JSON字符串

JSON.parse(text[, reviver]) 将一个符合JSON格式的字符串转换成JavaScript对象或数组

const obj = {uname:'Lily',age:18,hobby:['乒乓球','足球'],family:{baby: '老baby'}}const o = JSON.parse(JSON.stringify(obj))// 将原对象转换成字符串后又转换为对象,这个新对象与原对象无关联console.log(o)o.hobby[0] = '篮球'o.family.baby = '小baby'console.log(obj)

在这里插入图片描述

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

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

相关文章

力扣 188. 买卖股票的最佳时机 IV

题目来源&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/ C题解&#xff1a;动态规划 思路同力扣 123. 买卖股票的最佳时机 III-CSDN博客&#xff0c;只是把最高2次换成k次。如果思路不清晰&#xff0c;可以将k从0写到4等找找规律…

Vue | (三)使用Vue脚手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;初始化脚手架&#x1f407;创建初体验&#x1f407;分析脚手架结构&#x1f407;关于render&#x1f407;查看默认配置 &#x1f4da;ref与props&#x1f407;ref属性&#x1f407;props配置项 &#x1f4da;混入&#x1f4da;插件&#x1f4da;scoped样…

参数替换之${parameter-default}和${parameter:-default}

1.${parameter-default}和${parameter:-default} ${parameter-default}&#xff0c;如果变量parameter没被声明&#xff0c;那么就使用默认值 ${parameter:-default}&#xff0c;如果变量parameter没被声明&#xff0c;那么就使用默认值 ${parameter-default}和${parameter:-…

【Java】纯小白的三种工厂模式基础知识学习笔记

工厂模式概念 在Java中&#xff0c;工厂模式是一种设计模式&#xff0c;用于创建对象而无需指定明确的类。工厂模式通过定义一个共同的接口或抽象类来创建对象&#xff0c;然后由工厂类根据特定条件或参数来实例化具体的对象。 工厂模式通常包括三种类型&#xff1a;简单工厂…

Linux网络编程——序列反序列化

文章目录 0. 前言1. 认识协议2. 序列号与反序列化3. 自定义协议——网络计算器4. json 本章Gitee仓库&#xff1a;序列反序列化 0. 前言 tcp是面向字节流的&#xff0c;但是如何保证读取的数据是一个完整的报文呢&#xff1f; 管道也是面向字节流&#xff0c;写端写了一大堆的…

LeetCode_20_简单_有效的括号

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 栈 1. 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型…

Sora:新一代实时音视频通信框架

一、Sora简介 Sora是一个开源的实时音视频通信框架&#xff0c;旨在提供高效、稳定、可扩展的音视频通信解决方案。它基于WebRTC技术&#xff0c;支持跨平台、跨浏览器的实时音视频通信&#xff0c;并且具备低延迟、高并发、易集成等特点。 --点击进入Sora(一定要科学哦&#x…

机器学习基础(一)理解机器学习的本质

导读&#xff1a;在本文中&#xff0c;将深入探索机器学习的根本原理&#xff0c;包括基本概念、分类及如何通过构建预测模型来应用这些理论。 目录 机器学习 机器学习概念 相关概念 机器学习根本&#xff1a;模型 数据的语言&#xff1a;特征与标签 训练与测试&#xf…

四分位距IQR_ interquartile range

四分位距IQR_ interquartile range 1 IQR&#xff08;Interquartile Range&#xff09;四分位距的含义2 如何计算IQR参考&#xff1a; 1 IQR&#xff08;Interquartile Range&#xff09;四分位距的含义 官方定义&#xff1a; 四分位距&#xff08;interquartile range, IQR&a…

机器学习中梯度下降法的缺点

机器学习中的梯度下降法是一种寻找函数最小值的优化算法&#xff0c;广泛应用于训练各种模型&#xff0c;尤其是在深度学习中。尽管其应用广泛&#xff0c;但梯度下降法也存在一些不可忽视的缺点&#xff1a; 1. 局部最小值和鞍点 局部最小值问题&#xff1a; 对于非凸函数&a…

数据分析 - 机器学习

1&#xff1a;线性回归 线性回归是一种统计技术用于对输出变量与一个或多个输入变量之间的关系进行建模 用外行人的话来说&#xff0c;将其视为通过某些数据点拟合一条线&#xff0c;如下所示 以便在未知数据上进行预测&#xff0c;假设变量之间存在线性关系 点和线之间存在微小…

Git面试题整理(基本点)

1.简述Git Git是一种分布式版本控制系统&#xff0c;它允许多个开发者在任何时间&#xff0c;从任何地点对代码进行编辑和分享&#xff0c;而不会互相干扰。Git通过跟踪和管理代码的历史版本&#xff0c;帮助团队协作开发复杂的项目。 与集中式版本控制系统不同&#…

[ansible] playbook运用

一、复习playbook剧本 --- - name: first play for install nginx #设置play的名称gather_facts: false #设置不收集facts信息hosts: webservers:dbservers #指定执行此play的远程主机组remote_user: root #指定执行此play的用…

【Java万花筒】选择最适合您的数据序列化格式:比较 Avro、Protocol Buffers、JSON、XML、MessagePack和BSON

选择最佳数据序列化格式&#xff1a;找到适合您的解决方案 前言 在当今数据驱动的世界中&#xff0c;高效地处理和传输数据变得至关重要。选择合适的数据序列化格式对于数据存储、通信和处理的性能至关重要。本文将介绍并比较几种常用的数据序列化格式&#xff0c;包括Apache…

python绘制k线图均线图

AAPL.csv 数据文件 Date,Close,Volume,Open,High,Low 06/23/2023,$186.68,53117000,$185.55,$187.56,$185.01 06/22/2023,$187.00,51245330,$183.74,$187.045,$183.67 06/21/2023,$183.96,49515700,$184.90,$185.41,$182.5901 06/20/2023,$185.01,49799090,$184.41,$1…

2.19C语言学习

P8597 [蓝桥杯 2013 省 B] 翻硬币 因为把相邻两个硬币翻转两次相当于不翻&#xff0c;所以最优方案中同一组硬币最多只会翻转一次&#xff0c;故翻转顺序无后效性&#xff0c;考虑贪心&#xff1a;从前往后比较&#xff0c;发现一个不同的硬币就把它和他后面的硬币翻转&#x…

单例模式的几种实现方式

在Java中&#xff0c;实现单例模式主要有几种方式&#xff1a;懒汉式、饿汉式、双重检查锁定、静态内部类和枚举。每种方式都有其特点和适用场景。 1. 饿汉式&#xff08;线程安全&#xff09; 饿汉式是最简单的一种实现方式&#xff0c;通过静态初始化实例&#xff0c;保证了…

springboot 事务管理 详细介绍

在Spring Boot中&#xff0c;事务管理是一种关键的特性&#xff0c;它确保了数据的完整性和一致性。Spring Boot提供了对事务管理的内置支持&#xff0c;使得在应用程序中使用事务变得非常简单。 事务管理的基本概念 事务是指一系列操作&#xff0c;这些操作要…

15-55V输入自动升降压 光伏MPPT自动跟踪充电方案 大功率300瓦

1.MPPT原理--简介 MPPT&#xff0c;全称为Maximum Power Point Tracking&#xff0c;即最大功点跟踪&#xff0c;它是一种通过调节电气模块的工作状态&#xff0c;使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中&#xff0c;可有效地…

【蓝桥杯】算法模板题(Floyd算法)

一.弗洛伊德算法 用途&#xff1a;用来求解多源点最短路径问题。 思想&#xff1a;Floyd算法又称为插点法&#xff0c;是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。 主要步骤&#xff1a; 1&#xff09;初始化&#xff1a;使用邻接矩阵初始化dis…