深拷贝 浅拷贝 递归

浅拷贝指的是创建一个新对象,其中包含原始对象的引用(指针),并没有真正将原始对象的数据复制到新对象中,因此新对象与原始对象共享部分或全部数据。

深拷贝指的是创建一个新对象,并递归地将原始对象的数据复制到新对象中,因此新对象与原始对象之间不存在数据共享

浅拷贝:拷贝的对象和源对象相互有影响

深拷贝:拷贝的对象和源对象没有影响

浅拷贝方式一Object.assign(目标对象 ,源对象)

const obj = { name: 'longge', age: 16, arr: [] } 
Object.assign(newObj, obj)console.log(newObj)obj.age = 17obj.arr.push(1)console.log(newObj, obj)

浅拷贝方式二: 展开运算符

      const obj = { name: 'longge', age: 16, arr: [] }
const newObj = { ...obj }console.log(newObj)newObj.arr.push(10)console.log(obj)const arr = [1, 2, 3, { a: 1 }]const newArr = [...arr]console.log(newArr)newArr[3].a = 100console.log(arr) 

 浅拷贝方式三: concat / slice

 const arr = [1, 2, 3, { a: 1 }]// const newArr = [].concat(arr)// console.log(newArr)// newArr[3].a = 100// console.log(arr)const newArr = arr.slice()console.log(newArr)newArr[3].a = 100console.log(arr)

深拷贝 JSON.stringify 与 JSON.parse 

缺点 忽略函数、属性值为undefined的属性

* const newObj = JSON.parse(JSON.stringify(obj))console.log(newObj)//{name: 'longge', age: 16, arr: Array(0), o: {…}, d: '2023-11-23T11:15:04.081Z'}obj.arr.push(100)console.log(obj, newObj)

   深拷贝   自己实现 递归

function deepClone(obj) {if (obj == null) return objif (obj instanceof Date) return new Date(obj)if (typeof obj !== 'object') return obj// obj 是对象或数组const newObj = new obj.constructor()for (let k in obj) {newObj[k] = deepClone(obj[k])}return newObj}const o = { a: 1, b: 2, c: { m: 20 } }const newObj = deepClone(obj)// newObj.c.m = 30console.log(newObj)// console.log(o) 

函数自己调用自己

function getNum(n) {if (n === 2) return 2if (n === 1) return 1return getNum(n - 1) + getNum(n - 2)}console.log(getNum(10))getNum(5)  getNum(4)+ getNum(3) 5 +  3getNum(4)  getNum(3)+ getNum(2)  3  + 2getNum(3)  getNum(2)+ getNum(1) = 2 +1

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

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

相关文章

Shell条件变量练习

1.算数运算命令有哪几种? (1) "(( ))"用于整数运算的常用运算符,效率很高 [rootshell scripts]# echo $((24*5**2/8)) #(( ))2452814 14 (2) "$[ ] "用于整数运算 [rootshell scripts]# echo $[24*5**2/8] #[ ]也可以运…

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】特征点检测与匹配

目录 前言 算法原理 一、图像特征介绍 二、特征检测子 三、特征描述子

Python缺失值处理实现

在数据处理相关工作中,读取的数据中常常会有缺失值的情况,为顺利进行后续的操作,需要首先对缺失值进行处理,处理的方式一般为删除或填充,Python中提供了专门的工具包,可以方便地进行实现。读取操作可以由pa…

WebGL技术框架及功能

WebGL(Web Graphics Library)是一种用于在Web浏览器中渲染交互式3D和2D图形的JavaScript API。它允许在不需要插件的情况下,在支持WebGL的浏览器中直接运行高性能的图形渲染。WebGL没有一个固定的技术框架,而是基于JavaScript API…

【Vue】绝了!这生命周期流程真...

hello,我是小索奇,精心制作的Vue系列持续发放,涵盖大量的经验和示例,如果对您有用,可以点赞收藏哈~ 生命周期 Vue.js 组件生命周期: 生命周期函数(钩子)就是给我们提供了一些特定的…

SpringBoot整合MongoDB: 构建高效的数据存储应用

文章目录 1. 引言2. MongoDB简介3. 准备工作4. SpringBoot中配置MongoDB5. 创建MongoDB实体类6. 使用Spring Data MongoDB进行数据操作7. 编写Service层8. 控制器层9. 测试10. 拓展10.1. 复杂查询10.2. 数据分页10.3. 索引优化 11. 总结 🎉SpringBoot整合MongoDB: 构…

Django回顾2

目录 一.HTTP 1.URL介绍 2.格式: 3.补充: 二.web框架 1.什么是框架 2.什么是web框架 3.wsgi协议 基于wsgi协议的web服务器: 4.协议是怎么规定的 三.Django 1.MVC与MTV模型(所有框架其实都遵循MVC架构) 2.…

Linux(gRPC):Ubuntu22.04安装gRPC

gRPC是谷歌出品的语言无关的RPC框架,使用其可以实现高效的RPC调用。 安装方法可以参照: Quick start | C++ | gRPC Ubuntu22.04上实际的安装方式如下: 1.安装新于v3.13版本的cmake 2.安装辅助工具 sudo apt install -y build-essential autoconf libtool pkg-config 3.设…

NOI / 1.7编程基础之字符串 31:字符串p型编码

描述 给定一个完全由数字字符(0,1,2,…,9)构成的字符串str,请写出str的p型编码串。例如:字符串122344111可被描述为"1个1、2个2、1个3、2个4、3个1",因此我们说122344111的p型编码串为1122132431&#xff1…

别太担心,人类只是把一小部分理性和感性放到了AI里

尽管人工智能(AI)在许多方面已经取得了重大进展,但它仍然无法完全复制人类的理性和感性。AI目前主要侧重于处理逻辑和分析任务,而人类则具有更复杂的思维能力和情感经验。 人类已经成功地将一些可以数据化和程序化的理性和感性特征…

企业级开发链表思路

项目结构 头文件代码 头文件代码LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #include <stdio.h> #include <stdlib.h> #include <iostream> // 链表小节点 typedef struct LINKBODE {struct LINKBODE* next;}LinkNode; // 遍历的函数指针 typedef …

人工智能|机器学习——感知器算法原理与python实现

感知器算法是一种可以直接得到线性判别函数的线性分类方法&#xff0c;它是基于样本线性可分的要求下使用的。 一、线性可分与线性不可分 为了方便讨论&#xff0c;我们蒋样本增加了以为常数&#xff0c;得到增广样向量 y&#xff08;1;;;...;&#xff09;,则n个样本的集合为&a…

基于ChatGPT等大模型快速爬虫提取网页内容

本文将介绍一种基于ChatGPT等大模型快速爬虫提取网页内容的方法。传统的爬虫方法需要花费较大精力分析页面的html元素&#xff0c;而这种方法只需要两步就可以完成。下面将从使用步骤、方法扩展和示例程序三部分进行介绍。RdFast智能创作机器人小程序预计本周2023-11-30之前集成…

机器学习之决策树及随机森林

决策树 概念 决策树(Decision Tree)是一种常见的机器学习算法,用于分类和回归任务。它是一种树状结构,其中每个内部节点表示一个特征或属性,每个分支代表一个决策规则,而每个叶节点表示一个输出标签或值。 构建决策树过程 构建决策树的过程通常涉及以下步骤: 数据准…

PTA存档简单题之《函数中return的可以是式子》

本题要求实现一个计算非负整数阶乘的简单函数&#xff0c;并利用该函数求 1!2!3!...n! 的值。 函数接口定义&#xff1a; double fact( int n ); double factsum( int n ); 函数fact应返回n的阶乘&#xff0c;建议用递归实现。函数factsum应返回 1!2!...n! 的值。题目保证输…

零信任安全:远程浏览器隔离(RBI)的重要性

引言 在当今数字化时代&#xff0c;网络安全已成为个人和企业关注的焦点。随着网络攻击和恶意软件的不断增加&#xff0c;远程浏览器隔离(RBI)SAAS系统变得至关重要。本文将深入探讨远程浏览器隔离系统的重要性&#xff0c;以及它如何帮助用户保护其网络免受恶意软件和网络攻击…

Python与GPU编程快速入门(二)

Python与GPU编程快速入门 文章目录 Python与GPU编程快速入门2、将GPU与CuPy结合使用2.1 CuPy介绍2.2 Python中的卷积2.3 使用SciPy在CPU上进行卷积2.4 使用CuPy在GPU上进行卷积2.5 测量性能2.6 验证2.7 在 GPU 上执行 NumPy 例程本文将详细介绍如何在Python中使用CUDA,从而使用…

nginx配置文件中最后一个 include servers/*;作用是什么?

在 Nginx 配置文件中&#xff0c;include servers/*; 这行代码的作用是包含&#xff08;或者说引入&#xff09;servers 目录下的所有文件到当前配置中。这是一种组织和管理 Nginx 配置的常见方式&#xff0c;允许将配置分散到不同的文件中&#xff0c;从而提高可管理性。 具体…

蓝桥杯day02——Fizz Buzz

1、题目 给你一个整数 n &#xff0c;找出从 1 到 n 各个整数的 Fizz Buzz 表示&#xff0c;并用字符串数组 answer&#xff08;下标从 1 开始&#xff09;返回结果&#xff0c;其中&#xff1a; answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] &…

计算机杂谈系列精讲100篇-【计算机应用】PyTorch部署及分布式训练

目录 C平台PyTorch模型部署流程 1.模型转换 1. 不支持的操作 2. 指定数据类型 2.保存序列化模型 3.C load训练好的模型 4. 执行Script Module PyTorch分布式训练 分布式并行训练概述 Pytorch分布式数据并行 手把手渐进式实战 A. 单机单卡 B. 单机多卡DP C. 多机多卡DDP D. L…