JS封装深拷贝函数

JavaScript - 浅拷贝 / 深拷贝(函数封装) 前言 如果你只想知道如何实现深浅拷贝,请直接跳过 前言 ,移步代码部分。 今天开发小程序,需求是 实现一个长按管理应用的功能(似支付宝应用管理功能) ,当我做到了用户可以添加或移除应用时,发现直接操作改变了原数组(即应用列表数据),导致取消功能无法完成(因为需要对比原数组,但已经被改变了)。 解决办法就是将初始数组进行拷贝,让用户操作副本。这样取消按钮的恢复与保存功能就能实现。 浅拷贝 仅仅复制对象的引用,而不是对象本身。 浅拷贝的实现方法比较简单,下面介绍 2 个,都可以直接使用。 一、简单复制 阅读详情

Object.assign只能深拷贝第一层的数据,如果有多层数据就会出现浅拷贝的情况

// 处理深拷贝问题 一个对象里面可能会出现多种情况,
let a = { 
    a:1,
    b:[1,2,3,{a:1},[1,2]],
    c:{c1:1,c2:2,c3:{cc1:1}},
    d:function(){
        console.log(1)
    },
    e:[{a:1},{b:1}],
    f:[{a:1},{b:1},[1,2]],
}
let b = AssignObject(a)
b.a = 2
b.b[0] = 2
b.b[3] = {a:2}
b.b[4] = [2,2]
b.c.c1 = 2
b.c.c3.cc1 = 2
b.d = function(){console.log(2)}
b.e[0].a = 2
b.f[0].a = 2
b.f[2] = [2,2]
console.log(a,b)

AssignObject (obj) {
    var target = obj instanceof Array ? [] : {}
    if(obj instanceof Array) {
      obj.forEach(item=>{
        if(item instanceof Object && typeof item !=='function'){
          target.push(AssignObject(item))
        } else {
          target.push(item)
        }
      })
      return target
    }
    for( var i in obj){
      // if(obj[i] instanceof Array){
      //   target[i] = AssignObject(obj[i])
      // } else if(obj[i] instanceof Object && !(obj[i] instanceof Array) && typeof obj[i] !=='function') {
      //   target[i] = AssignObject(obj[i])
      // } else {
      //   target[i] = obj[i]
      // }
      if(obj[i] instanceof Object && typeof obj[i] !=='function') {
        target[i] = AssignObject(obj[i])
      } else {
        target[i] = obj[i]
      }
    }
    return target
  }

 

RK3568平台(网络篇)WIFI模块RTL8821CU调试 RTL8821CU是瑞昱半导体推出的usb接口的wifi,下面的教程将介绍如何将RTL8821CU移植到rk3588的平台上。移植usb wifi需要修改的文件Android hal层需要修改的文件//kernel需要修改的文件kernel/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi //除去板上的sdio的wifi。 阅读详情

相关推荐

【牛股启动线】副图指标使用技术说明,图文案例分享,通达信炒股指标

如上图,在紫色线在黑色虚线上时,在出现紫色柱线时,通常会出现强势拉升的行情​。柱线加长加上紫色线上扬,进场跟随做多抓强势行情,紫色柱线和紫色线同时做多持续则可以继续持股。如上图,副图指标【牛股启动线】,指标信号包括紫色线走势信号和紫色柱线信号,以及底部的四条虚线技术信号​,还有一条绿色的参考线,一条黑色的虚线两天分档线。如上图,参考买点,紫色柱线开始出现时进场买点,在上图标记的位置对应的就是进场买点​。紫色柱线加长+紫色线上扬,多头共振持股,行情继续拉升阶段,持股待涨或顺势​进场做多。

weixin_69760830的博客 1907

js 如何实现深拷贝

深拷贝是指在拷贝一个对象时,不仅拷贝了对象本身,还拷贝了对象所引用的其他对象。相对于浅拷贝,深拷贝更加完整的复制了原对象,因此在一些需要保留原对象数据的场景中,深拷贝必不可少。

weixin_41835811的博客 229

生信物种注释软件Kraken2+Bracken的安装与使用

一、软件安装与数据库下载 1.Kraken2安装 Kraken2是一个基于k-mer算法的高精度宏基因组序列分类软件,能够快速的将测序reads进行物种分类。 使用conda一键安装,要先安装好anaconda或者miniconda conda install -y kraken2 输入krakek2 --help 出现如下所示帮助文档,则表示安装成功。 2.Bracken安装 bracken是一种从宏基因组数据中高度准确的计算物种丰度的统计方法。 同样使用conda一键安装 conda install -

jileiqwd的博客 1万+

js 封装的一个深拷贝的方法

js深拷贝的方法

weixin_53452157的博客 1472

STM32F103C8T6用官方bootloader实现IAP升级操作方法

在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修...

HXYDJ的博客 1万+

给汽车芯片做‘体检’:手把手教你用IEC62380和SN29500估算功能安全失效率

本文详细介绍了如何使用IEC62380和SN29500标准估算汽车芯片的功能安全失效率,涵盖基础认知、方法论对比及实战计算。通过具体案例演示两种标准的应用流程,帮助工程师准确评估半导体器件的可靠性,确保符合ISO 26262标准要求。

weixin_28725553的博客 458

js-深复制(封装)

深拷贝封装

zyt0502的博客 647

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 412

javascript深拷贝函数封装

javascript深拷贝函数封装

m0_63986895的博客 494

brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。 brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。 1.使用 // bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

华秋实的专栏 1851

dht11在oled上显示温度 stm32l432kc,如何实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1201

Js实现深拷贝的4种方式

进行深拷贝的方法:递归函数 (推荐使用,项目中使用的更多,更小,更安全)JSON.stringify() 和JSON.parse();(不推荐使用,如果遇到Function,Date等类型的变量容易出现一些意料之外的问题)第三方库lodash的cloneDeep()方法JQuery的extend()函数 (推荐在JQuery项目中使用,其他项目依然推荐是用递归函数)

weixin_49295874的博客 1万+

从Overleaf上导出Latex论文发布到arxiv详细教程(常见问题与解决)

如果是做cv的论文请选择“Computer Vision and Pattern Recognition”,选择“Artificial Intelligence”可能会被on hold,貌似这个指的是传统的人工智能?我用公司邮箱注册发布一篇论文,一个多月还是“on hold”状态,换成edu邮箱第二天就被发布了。3、有可能是subject class选错了,编辑会帮你手动选择,然后发一封邮件告知你解除……报错缺失bbl等文件,这是因为从Menu中下载的话,是没有bbl文件的。论文被on hold。

沉迷单车的追风少年 3584

js判断数据类型以及深拷贝的函数封装

记录js 判断数据类型和深拷贝函数的封装。

锦瑟年华L的博客 226

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

如何使用js函数封装一个深拷贝?

【代码】如何使用js函数封装一个深拷贝?

zhaojiaxing123的博客 182

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JS-封装深拷贝函数

简单实现一个深拷贝的函数 实现 function deepClone(origin){ var isObject = any => typeof any == 'object' && any != null var isArray = any => Object.prototype.toString.call(any) === '[object ...

陈同学的博客 1773

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JavaScript -深拷贝函数封装

深拷贝与浅拷贝区别 浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存; 改变一个对象,另一个会随之改变; 深拷贝:复制并创建一个一模一样的对象,不共享内存,修改新对象,旧对象保持不变。 浅拷贝实现 var arr = [1, 2, 3, 4]; var arr2 = arr; arr2[0] = "okokok"; console.log(arr); // ["okokok", 2, 3, 4] console.log(arr2); // ["okokok", 2, 3, 4]

HTML5_student的博客 886

js数组或者对象深拷贝和浅拷贝函数封装

浅拷贝 概念:浅拷贝的意思就是只复制引用,而未复制真正的值。仍指向同一个地址,修改时原对象也会受到影响 方法: 1.利用 = 赋值操作符实现浅拷贝。 2.数组的浅拷贝一般使用 slice、concat。 3.数组浅拷贝 - 遍历 。 4.对象浅拷贝 - Object.assign()。 5.对象浅拷贝 - 扩展运算符 函数封装 //对象及数组浅拷贝函数封装 functi...

CloudEmperor 1175

JS——深拷贝的封装函数

function deepClone(obj){ let objClone = Array.isArray(obj)?[]:{}; if(obj && typeof obj==="object"){ for(key in obj){ if(key in obj){ if(obj.hasOwnProperty(key)){ //判断obj子元素是否为对象,如果是,递.

Sunshine0508的博客 212

js深拷贝封装函数

function deepClone(object) { let str let newobj = object.constructor === Array ? [] : {} if (typeof object !== 'object') { return object } else if (window.JSON) { str = JSON.stringify(object) newobj = JSON.parse(str) } else { for.

weixin_52361730的博客 297

JavaScript手动封装一个深拷贝函数(递归实现)

浅拷贝: 简单的赋值拷贝操作,产生重复释放问题 深拷贝: 在堆区重新申请空间,进行拷贝操作,防止重复释放问题 <script> const people = { name: '一只不太聪明的燕子', age: 18, address: { city: 'Nanjing' }, hobby: ["吃饭", "睡觉", "写bug", { play: ["排球", "羽毛球"] }] .

weixin_42678796的博客 869

js深拷贝函数封装

function deepClone(object) { let str let newobj = object.constructor === Array ? [] : {} if (typeof object !== 'object') { return object } else if (window.JSON) { str = JSON.stringify(object) newobj = JSON.parse(str) } else { for.

weixin_47545264的博客 208

Javascript封装深拷贝

Javascript封装深拷贝

qq_43151592的博客 272

js对象深复制/深拷贝功能函数封装

js对象深复制封装(深拷贝) 深复制,及源对象的属性如果有对象,该对象属性修改后,不会引起复制后的对象各属性的改变, 源对象的任何属性及子属性与新对象的直接没有任何引用关系。 一下例举几种浅复制常见方法: for(var prop in obj){ // 浅复制 } Object.assign();//浅复制 var obj1={...obj};//浅复制 如果原obj1就存在,还会改变原obj1的引用地址

RequesToGod的博客 379

js常见面试题,深拷贝的函数封装

function mycopy(_data){ // 判断是否为基本数据类型或者是否为空值,如果是则返回数据值 if(typeof _data !== "object" || _data == null){ return _data; } let data; // 如果不是基本数据类型,则判断传入的是数组还是对象,并赋值给返回值data if(_data instanceof Array){ d...

LJXLQXX的博客 260

【JS】自定义JS工具函数库-自定义对象方法-new-instanceof-mergeObject-实现数组与对象的深拷贝与浅拷贝-封装字符串相关函数

文章目录1. 自定义new定义使用结果2. 自定义instanceof定义使用结果3. 自定义合并对象mergeObject定义使用结果4. 对象与数组的深拷贝与浅拷贝4.1 区别深拷贝与浅拷贝4.2 浅拷贝定义1定义2使用结果4.3 深拷贝定义1 使用json的API使用结果定义2使用结果定义3使用结果定义4 最终优化 优化遍历性能 关于 自定义JS工具类 相关类似的源码请看 https://gitee.com/ykang2020/my_utils 1. 自定义new 创建Fn构造函数的实例对象 定义

YK菌的博客 978
上一篇: linux服务器配置ssh免登入及修改机器名字
下一篇: 巧妙的用switch代替多个if-else
大青花鱼の
博客等级 码龄8年 131粉丝 67原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值