js 遍历实现深拷贝

从AutoCAD到中望CAD:国产化替代的兼容性实测与平稳迁移指南 在正版化合规与降本增效的双重驱动下,越来越多的设计院和制造企业开始评估CAD软件的国产化替代方案。对于长期依赖AutoCAD的工程师而言,软件切换的核心疑虑往往集中在DWG文件兼容性、操作习惯迁移、二次开发脚本的复用程度以及批量出图效率等基础技术环节。本文从通用CAD应用原理出发,结合实际工程场景,系统梳理了从选型评估、安装部署到字体与外部参照处理、打印样式配置、LISP脚本兼容性验证的完整技术路径,并给出了一套可复制的分阶段落地路线。无论你是关注设计工具选型的技术管理者,还是即将切换绘图环境的一线工程师, 阅读详情

js 遍历实现深拷贝

之前写过利用 JSON.stringify 和 JSON.parse 来实现深拷贝
这篇笔记利用遍历迭代的方式实现深拷贝

遍历实现深拷贝

        function deepCopy(obj) {
          var newobj = null;  //创建一个新对象,置为null
          if(typeof obj == 'object' && obj != null){  //判断传入的被拷贝obj是否为一个对象,是否为null
            newobj = obj instanceof Array ? [] : {};  //obj是不为null的对象,那么是数组的话,让newobj为一个[]数组对象,否则开辟空间为一个{}对象
            for ( key in  obj) {  //遍历这个obj,并赋值给newobj对象
              newobj[key] = deepCopy(obj[key]);
            }
          } else {
            newobj = obj;  //如果obj为基本类型值,就直接赋值给newobj
          }
          return newobj;  //返回这个新对象
        }

暂时看不懂上面的内容没有关系,我们先调用试一下:
创建一个对象

        let obj = {
            name: 'hjc',
            mian: [18, 18],
            fn: function () {
                console.log('我是fn');
            },
            old: {
                one: 1,
                two: 2
            }
        }
        console.log(obj);  //先打印上面这个对象,往上看这个对象包含了很多东西
        var obj1 = deepCopy(obj);  //利用前面我们定义的深拷贝函数(往上看粘贴的第一块代码)得到新对象obj1
        obj1.name = 'ccc'; //改变obj1的name属性
        obj1.mian[0] = 0;  //改变obj1中数组属性的第一个值
        console.log(obj1);  //打印这个新对象obj1

得到的结果:
在这里插入图片描述
当我们把 obj 对象传入进去之后:
1、会先对 obj 对象进行判断,它是一个非空的object,所以进入 for 循环
2、这时候遍历 obj 的属性,把属性再传入进去
3、如果属性为 name ,那么是基本类型值,直接赋值就好
4、如果是类似于 mian, old 这种非空对象,就要对这些 mian, old 非空对象遍历
5、将mian,old 的属性元素传入,进行判断,例如 mian 的属性元素第一个为 18,那么把 18 传给第二个对象的 mian 属性的元素的第一个(在obj1改变之前)

FPGA新手必看:用USB转TTL实现串口通信的完整流程(附CH340G电路详解) 本文为FPGA新手提供了通过USB转TTL模块实现串口通信的完整实战指南。详细解析了CH340G电路设计要点、硬件连接方法,并分享了经过验证的Verilog代码框架,帮助读者快速掌握FPGA与PC通信的核心技术,解决电平匹配与波特率设置等常见问题。 阅读详情

相关推荐

COLMAP在Ubuntu下的编译陷阱与实战避坑指南——从环境配置到三维重建全流程

本文详细介绍了在Ubuntu系统下编译和配置COLMAP三维重建工具的全流程,包括环境准备、依赖库安装、CUDA加速配置以及常见编译问题的解决方案。通过实战案例演示了从图像特征提取到稠密重建的完整步骤,并提供了性能优化和问题排查的实用技巧,帮助用户高效完成三维重建任务。

weixin_29003437的博客 1048

【前端第九课】 JS 基础语法

JS 基础语法

Ws_zqw的博客 1747

银河麒麟V10 SP3系统下如何安全安装gcc-toolset-10(附yum仓库避坑指南)

本文详细介绍了在银河麒麟V10 SP3系统中安全部署gcc-toolset-10的完整方案。核心在于通过配置默认禁用的yum仓库(如EPKL仓库)并配合--enablerepo参数进行精准安装,有效规避依赖冲突风险,实现与系统默认GCC 7.3的稳定共存。文章还提供了多版本环境切换、系统维护及故障排查的实用指南,确保操作的可控与可逆。

h0i1j2k3l的博客 589

JS里几种for...循环的区别

目录 1. 普通for循环 2. for(... in ...)循环 3. for(... of ...)循环 4. forEach循环 1. 普通for循环 普通for循环可用于遍历数组 let arr = ['A','B','C','D'] for(let i=0;i<arr.length;i++){ console.log(arr[i]) } // A // B // C...

路漫漫其修远兮,吾将上下而求索。 1656

SmsForwarder v6.4.0 + Flask API 实战:5步搭建手机验证码自动化接收服务

本文详细介绍了如何利用SmsForwarder v6.4.0和Flask API构建企业级验证码自动化处理系统。通过5个关键步骤,包括系统架构设计、Android端配置、Flask服务端实现、企业级部署方案以及实战应用场景扩展,帮助开发者高效处理短信验证码,提升自动化测试和数据采集的工作效率。

weixin_30292745的博客 393

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战

本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。

salt9的博客 1027

JS新语法学习之let

使用let 定义变量 首先看到个有意思的问题,为什么let要叫let Why was the name ‘let’ chosen for block-scoped variable declarations in JavaScript? 一、let可以定义作用在块级作用域的变量 //语法 let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]; let test1 = 2; 在react中let几乎可以看为var。 所谓作用在块级可

clearlov3的博客 1547

DELL服务器BIOS下配置RAID阵列

dell服务器配置raid阵列

weixin_58250887的博客 1万+

JS数组各种遍历方式分析

前言 数组是日常开发中最常见的数据类型,很多场景一个for循环基本都可以实现。但是想要更高效、更准确的开发,数组的使用是要了解的很透彻才行。本文从数组的遍历和操作两个角度来讲解数组的使用。 数组遍历 for for是最常见的使用方式,遍历数组的同时可以对数组项进行处理,循环中的处理会改变原数组。无返回值。 例: let arr = [1, 2, 3, 4, 5] for (let i = 0; i...

weixin_41072232的博客 606

《MPDIoU:边界框回归的高效革新与YOLOv8集成实战指南》

摘要: MPDIoU(多优先级距离IoU)通过引入中心距离、形状差异和尺度变化的三步优化策略,解决了传统IoU在目标检测中的尺度敏感、收敛低效和场景局限问题。相较于GIoU、DIoU等主流方法,MPDIoU在精度、速度和鲁棒性上实现全面提升,尤其在复杂场景和小目标检测中表现突出。通过代码集成和训练优化,MPDIoU在YOLOv8中显著提升COCO数据集AP指标,并在智能安防(密集行人检测)和工业质检(微小缺陷定位)等垂直领域验证了其应用价值。未来研究方向包括动态权重调整和多模态融合,进一步拓展边界框回归的精

m0_64661770的博客 159

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 714

let in,let of的区别

【代码】let in,let of的区别。

weixin_45776308的博客 5363

C#与硬件开发入门:从零开始搭建你的第一个硬件项目

《C#硬件开发入门指南》摘要:本文介绍了使用C#进行硬件开发的基础知识,重点讲解了通过串口通信控制硬件设备的实现方法。内容包括:C#硬件开发优势、必备基础知识、环境准备步骤,并提供了一个完整的串口数据读取示例代码。文章还给出了进阶学习建议和常见问题解决方案,帮助开发者快速掌握C#与硬件设备通信的基本技能,为进一步开发物联网、工业控制等应用打下基础。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 974

JS对象深拷贝的几种方法总结

例: var obj = { name: "韩信", age: 18, skin: [ { id: 0, name: '街头霸王', color: 'yellow' }, { id: 1, name: '飞衡', color: 'red' } ] } 1. for…in遍历拷贝对象 function copy(obj) { var obj2 = {} for (var key in obj) { obj2[key] = typeof ob

qq_44704740的博客 1903

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Lodash.js常用拷贝

lodash.js 降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。非常适用于:遍历 array、object 和 string;对值进行操作和检测;创建符合功能的函数。 常用拷贝 _.clone(value):浅拷贝。浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间。 _.cloneDeep(value):...

weixin_30691871的博客 123

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

js-对象深拷贝

写出一个函数,实现对,对象的深拷贝 要求实现一个函数clone。 let obj={ name:'小明', age:24 } let obj1=clone(obj); 修改obj1,不会影响到obj的值。 这道题,在obj上面,只写一层,对象里面没有嵌套数组或对象,但是要考虑到这种情况。 就是逐个遍历,如果检测到属性值是时引用类型就用当前属性进行遍历。 functio...

weixin_43312083的博客 165

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

介绍下深度优先遍历和广度优先遍历,如何实现? 每日一题系列(五)

前言 深度优先遍历,广度优先遍历,基本上前端人员是很少听说过的,应用场景挺少,并且也没怎么接触过数据结构,因此会觉得陌生 应用场景可用于实现深拷贝 所以这题目可以只做个了解,其实实现也是挺简单的,无非是一个栈,一个队列 深度优先遍历 深度优先遍历DFS 与树的先序遍历比较类似。 假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起

小鹿的博客 1111

通过递归实现深拷贝

【代码】通过递归实现深拷贝。

梦寻汝的博客 199

面试题常考&必考之--js中的对象的浅拷贝和深拷贝(克隆,复制)(上)

1.首先引出问题: 输出结果: 分析:打印发现,修改第二个人名字时,第一个人也被修改了。不是我们想象的样子,该怎么办??? 2.然后: 结果: 附加:如何遍历对象呢??? 法一:$.each(data,function(key,value){ console.log("姓名:"+key+";"+"对应值:"+data...

a2458353547的博客 405

JavaScript 常规深拷贝方法

JavaScript 深拷贝(无 function 拷贝) function isObject (obj) { return (typeof obj === 'object' || typeof obj === 'function') && (obj !== null) } function deepcopy (obj, hash = new WeakMap()) { let copyObj, constructor = obj.construc

du_peiduo的专栏 374

js深拷贝的实现方式,有图有真相

深拷贝的实现,深拷贝与浅拷贝的区别1、浅拷贝与深拷贝的区别2、深拷贝的几种实现方式2.1、手动实现 1、浅拷贝与深拷贝的区别 如何区分深拷贝与浅拷贝?简单来讲 浅拷贝就是b复制了a,a或者b改变后,a、b都变化了。 深拷贝就是b复制了a,a或者b改变,对方都不会变化。 归根到底就是引用数据类型与基础数据类型在复制时的区别,具体的例子可以看这篇:js复制拷贝数据时的注意事项(https://blog...

weixin_44849078的博客 830

对象深拷贝

废话不多说直接上代码,新建一个对象。 let ob...

weixin_43908908的博客 184

对象的广度优先遍历和深度优先遍历,以及递归实现深拷贝。

废话不多说直接上代码,新建一个对象。 let obj = { a: { A: { end: true }, B: 2, C: 3, }, b: 2, c: { c2: { cend: 3 } }, d: 4 }; 广度优先遍历 深度优先遍历,先将obj转化成可迭代对象,在里面执行递归函数,将深层对象作为递归函数的参数传入。 * 对象的深拷贝也可...

qq_40146880的博客 866

新手javascript.info学习笔记——Object02

JavaScript 的对象是通过引用存储的,赋值时复制的是引用,而非对象本身,因此多个变量可以指向同一个对象,对象之间的比较只有在引用相同时才相等。垃圾回收由 JavaScript 自动管理,主要使用标记清除算法来回收不再被引用的对象。弱引用的结构不会影响垃圾回收,常用于缓存等场景。理解对象的引用特性和基本的垃圾回收机制即可,通常不需要深入研究其内部实现。

2401_87573999的博客 669

JS手写深拷贝

【代码】JS手写深拷贝。

qq_44735043的博客 362

原生javascript方法实现深拷贝

//深拷贝---------->>>>>>>> //遍历 //判断是否为原始值,是原始值直接浅拷贝 //判断是否为引用值(数组或对象),是的话直接创建新的数组或者对象 //递归,重复上述步骤 创建新对象person1 var person1 = { name: '张三', age: 18, sex: 'male', height: 180, weight: 140, sayFunction: function (){

weixin_46308155的博客 399
上一篇: js 中的深拷贝和浅拷贝
下一篇: 找出数组中三个元素之和为目标值的数
bubbleSweet
博客等级 码龄7年 14粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值