Js克隆对象

js对象拷贝 js拷贝,由jq得来。 立即下载

Js克隆对象

1 浅复制

具体方法

/* by 01022.hk - online tools website : 01022.hk/zh/ascii.html */
// 数组
Array.prototype.slice
const oldArr = new Array(100).fill(null).map(() => Math.random() * 100 | 0)
const newArr = oldArr.slice()

// 普通对象
Object.assign
const oldObj = new Object() // plain object
const newObj = Object.assign({}, oldObj)

2 深复制

1) 转字符串再还原

/* by 01022.hk - online tools website : 01022.hk/zh/ascii.html */
function deepClone(obj) {
    return JSON.parse(JSON.stringify(obj))
}

2) 便利对象,递归克隆

function deepClone(obj) {
    if ( typeof obj !==  'object' ) {
        return obj
    }
    const ret = Array.isArray(obj) ? [] : {}
    for ( let i  in obj ) {
        ret[i] = deepClone(obj[i])
    }
    return ret
}

3)循环引用对象

如果采用以上两种克隆方式,遇到循环引用对象会导致报错

function updateClone(obj) {
  const map = new Map();
  function deepClone(obj) {
    if (typeof obj !== 'object') {
      return obj;
    }
    const ret = Array.isArray(obj) ? [] : {};
    for (let i in obj) {
      const dist = obj[i];
      if (map.has(dist)) {
        continue;
      } else {
        map.set(dist, true);
        ret[i] = dist;
      }
    }
    return ret;
  }
  return deepClone(obj);
}

4)难克隆对象,甚至无法克隆对象

比如Date, Function, Error或者自定义的一些class构造对象

const oldDate = new Date()
const newDate = new Date(+oldDate)
// Date可以处理
// Function 使用toString,但是考虑到可能bind有些context,而且函数的作用域链,这些没法搞
// Error stack message这些也没法处理
// Window构造对象这些更是无法处理

5)对象属性key异常情况

属性不可枚举

Object.getOwnPropertyDescriptors({a:1})

image
这个可以通过使用Object.getOwnPropertyNames获取,但是赋值的时候得注意一下,也应该是enumerable: false

遍历了原型链上属性,方法

某些同学写代码不注意,直接Object.prototype.xx = xx
那么这个数据就是可以枚举的,for in慢的原因也是因为他不止遍历当前对象,他会沿着原型链一直向上找
可以通过hasOwnProperty过滤掉

总结

其实大部分时候只需要能够克隆plain object就行了,太过于复杂的情况无需考虑

本文来自博客园,作者:彩虹刀法,转载请注明原文链接:https://www.cnblogs.com/listen80/p/19028914

克隆javascript对象的三个方法小结 克隆javascript对象的三个方法整理,需要的朋友可以参考下。 立即下载

相关推荐

Vivado FFT IP核配置与实战:FPGA信号处理硬件加速指南

快速傅里叶变换(FFT)是数字信号处理(DSP)中的核心算法,用于将时域信号转换到频域进行分析。其原理基于离散傅里叶变换(DFT),通过蝶形运算的分解与复用,大幅降低了计算复杂度。在工程实践中,软件实现的FFT难以满足高速实时处理的需求,因此硬件加速方案至关重要。FPGA凭借其并行架构和可定制性,成为实现高性能FFT的理想平台。通过集成专用的FFT IP核,如Vivado中的Pipelined Streaming I/O架构,可以构建流水线化的计算引擎,实现极低延迟和高吞吐量的连续数据流处理。这种硬件方案特

weixin_42536863的博客 647

js对象克隆的几种方法

在js中对象克隆就是把对象值重新赋给一个新对象。克隆也存在深克隆于浅克隆的区别。引用类型的值都会被保存在堆内存中,在栈内存中会存在一个指针指向堆内存中的值。这时,如果只复制了指针,则可以说这个克隆为浅克隆,如果时根据指针找到具体的值,复制值,就可以称之为深克隆。

爱的叹息的专栏 6646

Unity WebGL发布避坑指南:从内存设置到字体打包,一次搞定所有常见问题

本文详细解析Unity WebGL发布的完整流程,从内存设置到字体打包,提供全面的避坑指南。涵盖关键检查清单、内存与性能优化配置、资源处理专项优化及平台适配技巧,帮助开发者高效解决常见问题,确保项目顺利发布。

weixin_28693309的博客 147

js克隆一个对象

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

weixin_34336526的博客 435

5G NR切换测量事件解析:从A1到B2的实战应用指南

本文深入解析5G NR切换测量事件,从A1到B2的实战应用指南。详细介绍了系统内切换事件(A1-A6)和系统间切换事件(B1-B2)的触发条件与配置建议,帮助优化网络性能。通过实际案例分享,展示如何调整参数提升切换成功率和降低乒乓切换率,适用于5G网络优化工程师。

tcp8optimizer的博客 513

Python深度学习基于Tensorflow(17)基于Transformer的图像处理实例VIT和Swin-T

定义窗口注意力机制,与普通的注意力机制不同,其是在各个窗口中执行注意力机制。从中可以看到,其创新点主要是将图片进行拆分作为序列数据带入。差不多,主要实现的是一个下采样的算法过程;相同位置的像素绑定到一起构成一张新的。模型定义完毕后,初始化模型并开始训练。由于层之间重复性出现,可以定义一个。中,这里先实现拆分图片类。进行操作时我们定义三个类。定义一个多头注意力机制类。的数据,导入数据如下。导入数据,这里同样用。

bigcrab的博客 1634

JS中的对象克隆(完整版看这里)

实现起来和lodash的cloneDeep方法类似,不过是简单的阉割版。

ahao' Blog 2137

Claude Code 的 Subagent 到底怎么用?

Subagent是ClaudeCode中的专业化AI代理系统,每个代理专注单一领域(如代码审查、数据库设计),具备独立记忆空间和并行处理能力。适用于中大型项目开发,通过配置文件定义代理职责与权限,可显式调用或自动触发多代理协作。典型场景包括代码安全审查、全栈并行开发和技术方案对比。使用时需注意避免过度拆分、权限过宽等陷阱,结合链式工作流和负载均衡可显著提升效率。实测在电商项目开发中能缩短20%工期并提升40%性能。

bgeyq的博客 1992

如何在JS中克隆对象

注意:这种方法不能处理函数和循环引用,并且会丢失对象的undefined、Symbol、Function等类型的属性,因为JSON.stringify()在序列化这些值时会将它们忽略或转换为null。在JavaScript中,克隆对象并不是直接支持的操作,因为JavaScript中的对象是通过引用传递的,而不是通过值传递。但是,你可以使用几种不同的方法来"克隆"或"复制"一个对象。浅拷贝只复制对象的顶层属性,如果属性是引用类型(如数组或对象),则复制的是引用的地址,而不是真正的对象。3. 手动实现深拷贝。

codemami的博客 1109

光模块MCU开发全解析:从架构原理到固件调试实战

在高速光模块中,MCU并非传统印象里的核心处理器,而是负责数字诊断、闭环控制和协议管理的嵌入式管家。随着800G、1.6T模块的普及,MCU与DSP/SoC的协同、I2C总线通信、ADC采集、APC/TEC控制等低速域任务愈发关键。理解MCU的选型规格、启动流程和固件设计,是保障光模块稳定运行的基础。本文从光模块架构切入,剖析MCU的角色定位,详细拆解I2C从机实现、电芯片配置、校准与升级等工程细节,并结合实际调试经验梳理常见故障与排查思路,为嵌入式工程师提供一份可落地的光模块MCU开发指南。

weixin_29192365的博客 365

excel wind插件使用_Python和wind的交互—在债券中的应用

个人认为学会了怎么用python和wind交互以及怎么用python处理Excel数据,就基本能替换日常很多琐碎的债券工作,还不用担心Excel某个值改变了导致整个报表都毁了。事实上在python调用wind函数和在Excel中调用函数一样简单,只要会基本的操作就够了。下面详细的介绍如何用python和wind进行交互。首先安装好python+pycharm+wind。因为python...

weixin_39863918的博客 5330

如何正确克隆 JavaScript 对象?

我有一个对象 x。我想将它复制为对象 y,这样对 y 的更改就不会修改 x。我意识到复制从内置 JavaScript 对象派生的对象会导致额外的、不需要的属性。这不是问题,因为我正在复制我自己的文字构造对象之一。如何正确克隆 JavaScript 对象?

HuntsBot的博客 793

Cadence SPB16. 6 安装流程

1.首先下载CadenceAllegroSPBorCAD16.6安装包 下载之后运行其中的setup.exe,然后先安装第一项LicenseManager 一直按next或install, 直到被询问license时,单击cancel,然后选是和finish。 2,安装Product Installtion 直接点next跳过这一步 安装完成后,点Exit退出 3.按ctrl+alt+delete打开任务管...

wangjie36的博客 5148

JavaScript深层克隆对象

今天做题看到了深层克隆对象,并且要求在原型链上编程 于是心血来潮索性来复习一下这个知识点克隆对象,这名词看着高大上,其实也没什么,便是拷贝一个长的一模一样的对象 也许有初学的小伙伴在想,那还不简单么,so easyvar obj1 = {name: 'payen'}; var obj2 = obj1;这可并不是克隆对象,obj1和obj2根本就是同一个对象, 他俩指向同一个内存地址空间,拿到了

尐轩web前端网络日志 4006

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JS克隆对象

var clone = function (obj) { if(obj == undefined || obj == null || obj == '') return; var cloneObj = {}; if (obj instanceof Array) { cloneObj = obj.concat(); } else { ...

luo381821的博客 175

Statistics and Machine Learning Toolbox

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

JavaScript对象深度克隆的高效方法

return obj;for (i = 0;i < len;if (!proto) {

qq_29715355的博客 401

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

js对象克隆复制 不改变原对象和改变原对象

https://www.cnblogs.com/showcase/p/10489636.html

qq_36657291的博客 1884

JS:对象的浅克隆、深克隆

JS中对象的深浅克隆 一、对象的浅克隆 1.浅克隆:只克隆对象的“表层”,如果对象的某些属性值又是引用类型值,则不进一步克隆它们,只是传递它们的引用 2.使用for…in…循环即可实现对象的浅克隆 var obj1 = { a: 1, b: 2, c: [44, 55, 66] }; // 实现浅克隆 var obj2 = {}; for(var k in obj1){ // 每遍历一个k属性,就给obj2也添加一个同名的k属性 // 值和obj1的k属性值相同

liuxudanhahaha的博客 1406

JS实现对象属性的克隆

原生JS实现对象属性的克隆。 浅层克隆 实现步骤如下: 1.判断是不是原型链上的属性 2.属性的克隆 function clone(origin, target) { var target = target || {}; for(var prop in origin) { if (origin.hasOwnProperty(prop))...

JohnWakeman20的博客 1197

如何正确克隆JavaScript对象?

我有一个对象x 。 我想将其复制为对象y ,以使对y更改不会修改x 。 我意识到,复制从内置JavaScript对象派生的对象将导致额外的不需要的属性。 这不是问题,因为我正在复制自己的文字

asdfgh0077的博客 307

用递归方法实现JavaScript中对象的深克隆

用递归方法实现JavaScript中对象的深克隆。递归函数主要是在函数内自己调用自己的一种函数。本文借助该方法详细描述在实现对象深克隆的工程中,递归的每一个层次干了什么工作。

qq_63536538的博客 1665

JS类型判断、对象克隆、数组克隆

类型判断 我们先说一下JS的数据类型,我们一般说JS有六大数据类型(ES6以前)分别是: 基本数据类型 Number String Boolean null undefined 引用数据类型 object 在ES6中新增了Symbol数据类型。 有时我们需要知道数据的类型其判断一些事情,我们经常会用typeof去判断数据类...

weixin_34353714的博客 112

js之对象深浅克隆

这里介绍两种方法对js对象的克隆 var obj1={data:["1","2"],lin:9} 方法1: function clone(obj,deep){ var obj2={};/*要返回的对象*/ if(obj instanceof Array){ obj2=[];/*判断对象是否为数组*/ } for(var key in obj){ var val=obj[key]; if(deep ...

dtbk123的博客 616

原生js实现对象的深度克隆

原生js实现对象的深度克隆 判断是不是原始值(另外是引用值) 判断是数组还是对象 判断相应的数组或对象 e.g.将obj克隆到obj1上且互不影响 var obj={ name: "wxy", age: 20, headset : ['wf','powerbeats'], son : { name: "wjx", son : { age:1 } } } var obj1 = {} fun

Joe53645364的博客 439

JavaScript对象克隆

浅克隆 let clone = Object.assign({}, target) 深克隆 简单的深克隆可以使用JSON.parse()和JSON.stringify(),这两个api是解析json数据的,所以只能解析除symbol外的原始类型及数组和对象 let clone = JSON.parse( JSON.stringify(target) ) 深度克隆,这里列出了原始类型,时间、正则...

qq_35965441的博客 219
上一篇: Linux标准大页没有使用案例分享
下一篇: HarmonyOS SDK助力讯飞听见App能力建设
cmdos
博客等级 码龄19年 83粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值