JS深度克隆代码实现

树莓派与stm32通信超详细解答过程 笔者之前发过关于stm32与openmv通信的教程,在学习了几天opencv后,想实现树莓派4B与stm32进行通信。于是上网查询资料,最后实现了两者之间的通信,相信这对大多数电赛人都很有帮助,opencv的识别效果是远高于openmv以及K210的。在此我参考了以下资料辅助我学习,大家可以参考。基于树莓派4B与STM32的UART串口通信实验(代码开源)_树莓派4b串口波特率-优快云博客。 阅读详情

js深度克隆

js对象组成

说对象的深度克隆之前,要先明白JS 中对象的组成。
以一句话说js中一切皆对象

具体数据类型分为两种:
- 原始数据类型
- 引用数据类型

原始数据类型:其中存储的是对象的实际地址。eg.
number、string、boolean、还有两个特殊的null、undefined

引用数据类型:其中存储的是对象的引用地址。eg.
array、function、object

克隆的概念

浅度克隆:原始类型为值传递,对象类型仍为引用传递。

深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。

顾名思义,克隆就是将a同样复制一份变成b,那何为深度克隆呢?先来看一个例子:

浅克隆

        var a = 1;
        var b = a;
        a = 10;
        console.log(b); // 1

        var a = 'hello';
        var b = a;
        a = 'world';
        console.log(b); // hello

        var a = true;
        var b = a;
        a = false;
        console.log(b); // true

并且复制完成后原变量的值依旧可以重新赋值并且不影响拷贝文件

        var a = 1;
        var b = a;
        a = 10;
        console.log(b); console.log(a);// 1,10

        var a = 'hello';
        var b = a;
        a = 'world';
        console.log(b); console.log(a);// hello,world

        var a = true;
        var b = a;
        a = false;
        console.log(b); console.log(a);// true,false

对于原始数据类型来说,这种赋值式克隆已可以实现。
对于function基本也可以利用简单赋值实现克隆:

function clone(obj) {
  var o = obj instanceof Array ? [] : {};
  for(var k in obj) 
    o[k] = typeof obj[k] === Object ? clone(obj[k]) : obj[k];
  return o;
}

var a = [[1, 2, 3], [4, 5, 6, 7]];
var b = clone(a);
console.log(b);

深度克隆

但是对于引用数据类型对象来说:

var a = [0, 1, 2, 3];
var b = a;
a.push(4);
console.log(b); // [0, 1, 2, 3, 4]

由于引用类型数据存储在应用地址内存中,因此赋值复制的也是这一块地址,因此相当于两个数组对象引用了一块数据地址,所以对a或者b的任何操作或者改变都会体现在对象中。

为了避免这种情况,引入了深度克隆。

    function clone(obj){
        var buf;
        if(obj instanceof Array){
            buf = [];
            var i = obj.length;
            while(i--){
                buf[i] = clone(obj[i]);
            }
            return buf;
        }
        else if(obj instanceof Object){
            buf = {};
            for(var k in obj){
                buf[k] = clone(obj[k]);
            }
            return buf;
        }
        else{
            return obj;
        }
    }

或者精简的写法:

function clone(obj) {
  var o = obj instanceof Array ? [] : {};
  for(var k in obj) 
    o[k] = typeof obj[k] === Object ? clone(obj[k]) : obj[k];
  return o;
}

var a = [[1, 2, 3], [4, 5, 6, 7]];
var b = clone(a);
console.log(b);
一次点击跑通:用 Postman 自动获取并携带 CSRF token,测试 SAP OData 写操作 SAP OData 写操作自动化测试方案 针对 SAP Gateway OData 服务写操作中常见的 CSRF token 验证问题,本文提出了一套基于 Postman 的自动化解决方案: 问题分析:解释了 CSRF token 的验证机制及其必要性,说明手工测试效率低下的原因 解决方案: 使用 Postman 环境变量存储 token 通过脚本自动获取并传递 token 利用 Collection Runner 实现一键执行 实施步骤: 创建环境变量存储 token 第一个请求获取 token 并存入变 阅读详情

相关推荐

Unity 第一人称视角控制移动、旋转

第一人称视角操作此功能主要是借鉴YouTube,写的蛮好我就搬运过来让大家也试试。

qq_36515472的博客 4201

js克隆一个对象

我们知道,对象类型在赋值的过程中其实是复制了地址,所以如果改变了一方,其他都会被改变。我们应该如何克隆一个对象,并且避免这种现象的发生呢? 方法一:Object.assign function copy(obj){ return Object.assign({}, obj); } 方法二:…展开运算符 function copy(obj){ return { …obj }; } 方...

weixin_34336526的博客 435

ArcGIS中利用DEM数据生成地形图既视感的等高线;利用掩膜进行等高线注记;DEM的可视化表达总结

文章目录前言一、效果图展示二、地形(DEM)可视化表达1.一维可视化2.二维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化总结 前言 最近老师布置作业:DEM的可视化表达。想做一个等高线地形图那样、看起来高级一点的等高线,可是我看网上大多数教程都只展示了【等值线】工具,做出来效果都一般。我自认为自己做出来的效果还可以,把步骤分享给大家。 一、

pink_pig__的博客 5万+

JS 深度克隆的实现方法

如果这个对象里面含有 Map 之类的这些玩意,克隆之后这个 mapList 就不再是一个 Map 结构了。console.log("克隆后的对象", deepClone(obj));console.log("克隆后的对象", deepClone(obj));// 环形引用 obj.c 等于 obj 本身。或者是这个对象里面有一些函数之类的,克隆之后这个函数后都没有了。console.log("原对象", obj);console.log("原对象", obj);

UserGuan的博客 3768

从仿真到流片:手把手教你优化65nm CMOS电荷泵的电流匹配与稳定性

本文详细介绍了在65nm CMOS工艺下优化电荷泵电流匹配与稳定性的工程实践指南。通过蒙特卡洛仿真、运放反馈结构版图技巧和全差分结构设计,实现优于1%的电流匹配精度和±2%以内的电流稳定性,特别针对current mismatch问题提供了有效的解决方案。

weixin_42522320的博客 416

手把手教你使用YOLOv11模型,训练自己数据集,百分百成功(无废话)

YOLOV11百分百成功训练自己的数据集并进行图像、视频流脚本预测

chenhenGzzz的博客 1952

在 JavaScript 中深度克隆对象

在 JavaScript 中深度克隆对象

m0_63639281的博客 2517

NOAA气象数据下载攻略

各方搜寻气象数据下载途径,发现网上最多的就是从NOAA下载,但是中途有尝试过很多次都没有下载到,每次都是显示不可用,今天终于下载成功了,特此记录。 首先我是从这个网址进入的:National Centers for Environmental Information (NCEI) formerly known as National Climatic Data Center (NCDC) | NCEI offers access to the most significant archives of oc

lianqian66的博客 3万+

深拷贝实现:如何在 JavaScript 中克隆对象

深拷贝(Deep Copy)是指创建一个新的对象,并且递归地复制原对象及其所有嵌套的子对象。这样,原对象和新对象之间就没有任何共享的引用,即修改新对象的属性不会影响原对象。相对而言,浅拷贝(Shallow Copy)只是创建一个新对象,但只复制对象的第一层属性。如果原对象中某些属性是引用类型(例如数组或对象),那么拷贝的新对象和原对象中的这些属性仍然指向相同的内存地址(即引用相同的对象)。深拷贝是克隆 JavaScript 对象时的一个重要技术,它能够确保新对象与原对象完全独立。

m0_62599305的博客 1528

【MCU】一种基于RTOS的无应答重发机制

文章目录一、背景描述二、结构框图三、基于RTOS的信号量的实现(3-1)思路描述(3-2)步骤(3-2-1)定义超时重发信号量(3-2-2)定义发送线程入口(3-2-3)定义接收线程入口四、基于定时器的实现(4-1)思路描述(4-2)步骤(4-2-1)创建定时器(4-2-2)定义定时器超时处理函数(4-2-3)定义发送线程入口(4-2-4)定义接收线程入口 一、背景描述 ​ 在微控制器之间进行数据通信时,大多需要添加无应答重发机制,以增强数据交互和通信的稳定性。 在使用UART通信的双方设备,当一次数据传输

iriczhao的博客 1523

从隐式求解器到显式求解器:COMSOL接触仿真中的求解策略对比与选择

本文深度解析了COMSOL中隐式与显式求解器在接触仿真中的应用与选择策略。针对非线性接触问题的核心挑战,详细对比了两种求解器的数学框架、优化技术及适用场景,并提供了参数调优和调试技巧,帮助工程师高效解决接触仿真中的收敛问题。

weixin_28347369的博客 682

【JavaScript】你了解深浅克隆吗

写在前面数组的深浅克隆在前端开发中经常使用,面试也经常被问到,本篇文章将详细介绍深浅克隆。深浅克隆深浅克隆的定义和区别 1、浅克隆: 只拷贝一层对象的属性,当一个属性的值为基本类型值时,...

Alberqing_的博客 377

【异常】Claude Code CLI工具 模型加载异常 /init报错排查与完整解决方案 There‘s an issue with the selected model (glm-5). It

此类跨厂商模型配置报错,核心诱因是API生态的兼容性不匹配。优先使用工具原生支持的模型体系,可快速解决90%以上的同类报错;若需跨厂商使用目标模型,需完成API端点、鉴权密钥、模型ID的全链路适配,确保全流程配置合规,即可完成异常修复。

奶爸的编程之路,也就一周冷个三天 3703

【JavaScript代码实现三】JS对象的深度克隆

1 function clone(Obj) { 2 var buf; 3 if (Obj instanceof Array) { 4 buf = []; // 创建一个空的数组 5 var i = Obj.length; 6 while (i--) { 7 ...

weixin_30278237的博客 75

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

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

js对象的深度克隆代码实现

function clone(obj){ var buf; if(obj instanceof Array){ buf = []; //创建一个空数组 var i = obj.length; while(i--){ buf[i] = clone(obj[i]); } return buf; } else if(obj instanceof Object){ buf = {}; f...

一条鱼 1921

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

js深度克隆和浅度克隆

“使用JavaScript深度克隆一个对象。” 这是一个出现概率很高的面试题,下面就来总结下,二者的区别以及其代码。科普一下: js一般有两种不同数据类型的值: 基本类型(包括undefined,Null,boolean,String,Number),按值传递; 引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内存中的地址。1.概念浅度克隆:基本类型为值传递,对象仍为引用传递。

匪鉴 2724

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JavaScript初学 学习笔记6:JavaScript之克隆(浅层克隆,深度克隆)

浅层克隆 要将 对象 obj 克隆给对象 obj1 //浅层克隆实现 var obj = { name: 'abc', age: 20, sex: 'male', arr: ['aaa', 'bbb', 'ccc'] } function copy(origin, target) { var target = target || {}; //为了防止用户不传 target(容错),给了参数就直接用,不给就当空对象 for (var prop in origin) { target[pro

chenyu-max 475

JS深度克隆的原理

  在开发过程中如果需要深度克隆,可能很多开发人员都会选择已有的库,采取调用API的形式,可以更加快速的实现效果。比如lodash库。但还是要自己代码实现下这个深度克隆,以便掌握其原理。此外,其原理也是比较简单的,代码原理如下:...

cobek的博客 178

js 深度克隆_练习

// 浅度克隆 function clone(o, t) { t = t || {}; for (var k in o) { t[k] = o[k]; } return t; } // 深度克隆 function deepClone(o, t) { t = t || {}; for (var k in o) { if (o.hasOwnProperty(k)) { // 排除原型链的非自定义属性 if (typeof(o[k]) == 'object') { if (Obj

zhchl567的博客 208

深度 Clone

深度克隆就是为了解决浅度克隆的问题,深度克隆后的对象不会影响到被克隆对象的属性,与被克隆对象完全独立。

CodingmanNAN的博客 297

一种在JS中实现对象深度克隆的方法

前 言 面试中经常被问到JS中的深度克隆, 在写代码中也会用到对象的深度克隆这个需求. 故将我能想到的方法都整理出来, 供大家参考. 请大家不啬赐教. 现有一个源对象 sourceObj 供拷贝, 如下: const sourceObj = { name: 'Alex', house: ["深圳湾一号", "江南别野"], more: { money: "1000000000000", carCount: "5", bank: { bank1: "中国工商银

qq_45743738的博客 456

js实现深度克隆

深度克隆 克隆或者拷贝分为2种: 浅度克隆 、 深度克隆 。 浅度克隆 :基本类型为值传递,对象仍为引用传递。 深度克隆 :所有元素或属性均完全克隆,并于原引用类型完全独立,即,在后面修改对象的属性的时候,原对象不会被修改。 实现深度克隆: 代码及注释: // 参数deep: true 表示深度克隆 否则 浅克隆 Object.prototype.clone = function(deep){ // 获取到调用函数的对象 // this

qq_53489791的博客 1889

JavaScript深度克隆

JavaScript深度克隆 所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。 遍历对象 判断是不是原始值 判断是数组还是对象 建立相应的数组对象 递归 原始数据类型 Number String Boolean null undefined 引用数据类型 array function object 深度克...

栖竹 253

浅度克隆和深度克隆

深度克隆是面试高频问题,他背后涵盖了很多js的知识点,为了强化记忆在这里总结一下 1.浅度克隆 function shallowClone(o) { const obj = {}; for ( let i in o) { obj[i] = o[i]; } return obj; } const oldObj = { a: 1, b: [ 'e', 'f', 'g' ...

X_dam的博客 215

js之克隆

克隆这个词语,从表面上我们都能明白啥意思,就不多说了,直接介绍算法实现。克隆分为浅度克隆和深度克隆。浅度克隆克隆一些简单的原始值。用到的知识:  对象枚举(遍历)...

M_DREAMER的博客 321

js 深度克隆

//深度克隆 var deepClone = function(obj){ if(typeof obj !== "object") return obj; //增加类型检测的同时, 增加其他类型的处理. if(obj instanceof Array){ //阻止 array对象 先调用 new arr.constructor(), 再赋值的情况 return

lingto1的专栏 358
上一篇: 元素的包裹性之css绘制三角形问题
下一篇: AngularJS常用指令
Crazier_qi
博客等级 码龄11年 13粉丝 42原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值