浅拷贝,简单深拷贝

文章目录

  • 浅拷贝
  • 简单深拷贝

浅拷贝

const _shallowClone = target => {let copy = Array.isArray(target) ? [] : {};for (let key in target) {if (target.hasOwnProperty(key)) {let value = target[key];copy[key] = value;}}return copy;
};

在这段代码中,我们定义了 _shallowClone 函数,它接受一个参数 target,表示要进行浅拷贝的目标对象。

首先,我们根据 target 的类型创建一个空的副本对象 copy。如果 target 是数组,则创建一个空数组作为
copy;否则,创建一个空对象。

然后,我们使用 for…in 循环遍历 target 对象的属性。对于每个属性,我们将其值赋给 value 变量,并将其复制到 copy
对象中的相应键名位置。

请注意,为了确保只拷贝 target 自身的属性,我们使用了 hasOwnProperty 方法进行检查。

最后,我们返回拷贝后的 copy 对象。

简单深拷贝

const _sampleDeepClone = target => {if (typeof target !== 'object' || target === null) {return target;}const cloneTarget = Array.isArray(target) ? [] : {};for (let key in target) {if (target.hasOwnProperty(key)) {if (target[key] && typeof target[key] === 'object') {cloneTarget[key] = _sampleDeepClone(target[key]);} else {cloneTarget[key] = target[key];}}}return cloneTarget;
};

在这段代码中,我们定义了 _sampleDeepClone 函数,它接受一个参数 target,表示要进行简单深拷贝的目标对象。

首先,我们对 target 进行类型判断。如果 target 的类型不是对象或为 null,则直接返回 target,因为不需要进行拷贝。

然后,我们根据 target 的类型创建一个空的克隆对象 cloneTarget。如果 target 是数组,则创建一个空数组作为
cloneTarget;否则,创建一个空对象。

接下来,我们使用 for…in 循环遍历 target 对象的属性。对于每个属性,我们首先使用 hasOwnProperty
方法进行检查,确保只拷贝 target 自身的属性。

然后,我们判断当前属性值 target[key] 的类型。如果它是对象且不为 null,则递归调用 _sampleDeepClone
函数进行深拷贝,并将拷贝后的结果赋值给 cloneTarget[key]。否则,直接将属性值复制到 cloneTarget[key]。

最后,我们返回完成深拷贝的 cloneTarget 对象。

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

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

相关文章

docker基本命令(持续更新)

docker基本命令(持续更新): 文章目录 docker基本命令(持续更新):一、镜像相关二、容器相关:三、dockerfile相关: 注:docker命令需要以root权限使用(大概&…

使用Homebrew搭建java环境

Homebrew Homebrew是一款包管理工具,目前支持macOS和linux系统。 默认安装路径为 /usr/local/ 。下载包的安装路径在/usr/local/Cellar/。 #安装 /bin/sh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" #卸载 /bin/sh -c "…

vue之性能优化

1.路由懒加载 所谓路由懒加载,其实就是路由通过import动态引入,而不是在文件最上面一个个全部引入,因为JS执行的时候会优先执行引入的文件,如果一次性引入过多,则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

Matplotlib接口和常用图形--画图接口

文章目录 任务描述编程要求 任务描述 本关任务:掌握matplotlib的基本使用技巧,并能简单使用matplotlib进行可视化。 相关知识 在深入使用matplotlib之前你需要知道几个matplotlib技巧,这些技巧能帮助你更快速掌握matplotlib。 导入matplot…

svg简单教程

推荐查看这个视频 一小时讲完SVG 简介 scalable 英 /ˈskeɪləbl/ 美 /ˈskeɪləbl/ adj. (计算机) 可扩展的;可改变大小的,可缩放的;可攀登的;可称量的;可去鳞的 vector 英 /ˈvektə/ 美…

lmbench学习

Ubuntu 手册页: lat_proc - 进程创建测试 编译时参考博客:lmbench基本的部署与使用 结果分析:性能测试工具 Lmbench 的使用方法以及解析运行结果

MIT 6.858 计算机系统安全讲义 2014 秋季(一)

译者:飞龙 协议:CC BY-NC-SA 4.0 MIT 6.858 计算机系统安全笔记 2014 秋季 2014 年由Nickolai Zeldovich 教授和James Mickens 教授教授授课的 6.858 讲座笔记。这些讲座笔记略有修改,与 6.858 课程网站上发布的内容略有不同。 第1讲&#x…

搭建prometheus、grafana监控平台

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

php调用guzzlehttp库时出现Segmentation fault的解决方案

先说结论,这个问题的原因是因为php7.4与openssl3不兼容产生的,解决方案如下: 输入openssl version -a查看openssl版本,如果是3以上的版本与php7.4不兼容,7.4以下的没测试过,估计也有问题。我最终是安装上了…

FFmepg--内存IO模式

功能: 内存IO模式:avio_alloc_context(): 自定义读写文件方式,打开文件 api // 自定义IO AVIOContext * avio_alloc_context (unsigend char * buffer;int buffer_size;void *opaque;int (*read_packet)(void * opaque, uint8_t * buf,in…

安装配置Spark集群

安装Spark集群主要包括以下步骤: 1、下载Spark安装包,在各节点中安装部署spark集群 2、配置整合 3、启动并测试 下载Spark 可以从官方网站下载合适的版本。当前环境已经提供了安装包,存放在 /opt/software目录下。 在node1节点上安装Sp…

SpringCloudAlibaba 网关gateway整合sentinel日志默认路径修改

SpringCloudAlibaba 网关gateway整合sentinel 实现网关限流熔断 问题提出 今天运维突然告诉我 在服务器上内存满了 原因是nacos日志高达3G,然后将日志文件发给我看了一下之后才发现是gateway整合sentinel使用了默认日志地址导致日志生成地址直接存在与根路径下而且一下存在多…

第16章——西瓜书强化学习

在强化学习中,智能体通过与环境的交互来学习如何做出决策。在每个时间步,智能体观察当前的环境状态,并根据其策略选择一个动作。环境会对智能体的动作做出响应,并给出一个奖励信号(reward),该信…

安装zabbix

部署Zabbix监控平台 部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 安装LNMP环境源码安装Zabbix安装监控端主机,修改基本配置初始化Zabbix监控Web页面修改PHP配置文件,满足Zabbix需求…

zeta新增三个任务教程,即将刷新,速撸

这期是延续上期的教程,前面的任务不变,所以直接复制的前面的教程,多了三个任务更新在后面。 简单说一下,zeta是已经发币的公链项目,但是它社区还有6%的用户激励token份额没发完,做主网的几个简单任务可以获…

cudnn下载国内满速下载地址长期有效更新

【cudnn9.0.0】 cudnn-9.0.0-windows.exe下载地址:点我下载此版本 cudnn-linux-x86-64-9.0.0.312-cuda12-archive.tar.xz下载地址:点我下载此版本 cudnn-linux-x86-64-9.0.0.312-cuda11-archive.tar.xz下载地址:点我下载此版本 cudnn-windows…

「CISP题库精讲」CISP题库习题解析精讲5道

前言 本节只要对CISP考试中的5道习题进行详细的讲解,时间比较少,敲多少道,就算多少道,反正全部也就1400多道。 习题部分 第一题 某企业内网中感染了一种依靠移动存储进行传播的特洛伊木马病毒,由于企业部署的杀毒软件,为了解决该病毒在企业内部传播,作为信息化负责人…

XR技术:短剧制作的全新纪元

在数字技术的浪潮中,XR(扩展现实)技术以其独特的魅力,正在为短剧制作带来革命性的突破。这种融合了虚拟现实、增强现实和混合现实等先进技术的创新工具,正逐渐改变着短剧制作的传统模式,引领着短剧艺术走向…

python 常用保留字(关键字)

Python中的保留字(也称为关键字)是那些被编程语言语法赋予了特殊意义的单词。这些词不能用作标识符,例如变量名、函数名或任何其他用户定义的名字。每个保留字都有其特定的用途和规则。 截至Python 3.8版本,Python的保留字有以下…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《含海上风电制氢的综合能源系统分布鲁棒低碳优化运行》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…