使用递归函数来实现一个对象的深拷贝

利用递归完成深拷贝 递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝。 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在栈中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。 首先,明确一点深拷贝和浅拷贝是针对对 阅读详情

function copy(obj) {
    let newObj = null; // 声明一个对象来存储拷贝之后的内容
    
    // 判断数据类型是否是复杂的数据类型,如果是则调用自己,如果不是则直接赋值即可!
    // 由于null不可以循环但是他的类型又是object,所以这个需要对null进行判断
    if (typeof(obj) == 'object' && obj !== null){
        // 声明一个变量用以存储拷贝出来的值,根据参数的具体数据类型声明不同的类型来存储
        newObj = obj instanceof Array? [] : {};
        // 循环obj的每一项,如果里面还有复杂的数据类型的话,则直接利用递归函数再次调用。
        for(let i in obj){
            newObj[i] = copy(obj[i])
        }
    } else {
        newObj = obj
    }
    return newObj; // 函数没有返回的值的话,则为undefined
}
let obj = { // 原对象,包含字符串,对象,函数,数组等不同类型。
   name: "test",
   main:{
       a:1,
       b:2
   },
   fn:function(){
       
   },
   firends:[1,2,3,[44,55]];
    
}

let obj1 = copy(obj);
obj1.name = '修改值';
obj1.main.a = 110;
console.log(obj,obj1)
微信小程tree组件,无限递归 原理:没什么原理就是无限递归,组件引用组件本身,如果在有子级的情况下才引用。 * 此处对递归原理不是很熟悉的需要注意一个坑,就是在对组件展开和关闭时候。只需要拿到当前坐标对数组对象直接赋值,并不需要去获取所谓的多维坐标数组。不管你的对象在总数组的第几层,他永远在当前数组的第一层 1.1、tree组件:wxml <view> <view wx:for="{{treeArr}}" wx:key="index"> <view class="view_ red" data 阅读详情

相关推荐

js深拷贝(递归实现)

通过递归可以简单实现对象的深度克隆,但是这种方法不管是ES6还是ES5实现,都有同样的缺陷,就是只能实现特定的object的深度复制(比如数组和函数),不能实现包装对象Number,String , Boolean,以及Date对象,RegExp对象的复制。 下面是完美版的深拷贝 参考自:[https://blog.youkuaiyun.com/liwusen/article/details/78759373](() function istype(obj,type){//判断包装类型的原型 return Objec.

m0_70647124的博客 1457

简单讲解浅拷贝和深拷贝

数据结构分成基本数据类型和引用数据类型。浅拷贝和深拷贝就是在这个基础上引入的概念。如果拷贝一个对象时,只对基本数据类型

betty_grant的博客 421

2026 最新实战教程:AI 重构开发全流程(从需求→上线→运维)

1)做什么系统2)技术栈3)功能模块4)部署要求plaintext我要做一个:待办事项(Todo)全栈应用技术栈:前端:React + TypeScript + Tailwind后端:Node.js + Express + MongoDB部署:Docker + 本地运行(后续可上云)功能:- 增删改查任务- 任务状态切换(完成/未完成)- 简单错误处理请按企业级标准生成:架构设计 + 全部代码 + 接口文档 + 启动命令。

qq_35779316的博客 1692

用递归实现深拷贝

深拷贝是指,拷贝对象的具体内容,两个内存地址是自主分配的,拷贝结束之后两个对象虽然存的值是一样的,但是内存地址不一样,两个对象页互相不影响,互不干涉。 下面我们来看一下递归实现深拷贝的具体步骤。 var obj= { "name":"豪豪", "age":22, "job":"程序员", "height":175, "type":{ "character":"tender" }

pure_lin7的博客 5336

FPGA实现高效数字下变频:CORDIC与CIC滤波器的Verilog优化设计

本文深入探讨了FPGA实现高效数字下变频的技术方案,重点介绍了CORDIC算法与CIC滤波器的Verilog优化设计。通过详细的算法原理分析、FPGA实现技巧和实战经验分享,展示了如何利用CORDIC的旋转运算替代乘法操作,以及CIC滤波器在降采样中的高效性能。文章还提供了完整的系统集成方案和资源优化策略,为无线通信和雷达信号处理领域的工程师提供了实用参考。

redis7keeper的博客 723

使用CNN/ResNet实现自动调制识别(RML2018.01a)

本文基于RML2018.01a大型数据集,给出CNN及其变体ResNet的信号识别的实现方式(附代码) 目录一、CNN的代码实现1.1 导入包1.2 数据读取及数据集划分1.3 构建CNN模型1.4 模型训练1.5 测试及模型可视化二、ResNet的代码实现 RML2018.01a数据集信息如下: 数据集来源 Over-the-Air Deep Learning Based Radio Signal Classification 调制类型 19种数字调制方式: 32PSK, 16APSK,

QAQIknow的博客 1万+

递归函数实现对象的深拷贝(JavaScript)

造成这个问题的主要原因在于数组类型和对象的typeof()都是object,由于Array.isArray()可以判断是否是数组,这样一来就一定是判断数组在前,判断对象在后,如果判断对象在前,则后面的判断数组会直接被覆盖掉,即使原对象中的属性存在数组也会以object输出,这个可以在f12开发者工具中查看。将每一数据都进行判断,判断的结果分为数组、对象、其他,对数组和对象进行再一次判断。对对象的深拷贝的难点在于对象的属性值可以是任意类型,而数组的元素可以是任意属性,这样也恰恰是解决它的办法。

weixin_53867427的博客 2358

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 467

如何使用递归函数来实现一个对象的深拷贝

【代码】如何使用递归函数来实现一个对象的深拷贝。

m0_73101944的博客 135

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3804

信号处理算法:离散余弦变换(DCT)_(1).离散余弦变换(DCT)概述

离散余弦变换的数学定义如下:对于一个长度为NNN的离散信号xnx(n)xn,其DCT变换后的系数XkX(k)XkXk∑n0N−1xncos⁡πNn12kk012N−1Xkn0∑N−1​xncosNπ​n21​kk012N−1其中,kkk是频率指数,nnn是时间或空间索引。离散余弦变换(DCT)是一种强大的信号处理技术,广泛应用于图像压缩、音频处理、数据压缩等领域。

2401_87715305的博客 1554

JavaScript 对象深拷贝的实现

// ./src/helpers/util.ts export function isPlainObject(val: any): val is Object { return toString.call(val) === '[object Object]' } export function deepMerge (...objs: any[]): any { const resul...

cell的博客 314

AI人工智能 Agent:在仓储物流中的应用

AI人工智能 Agent:在仓储物流中的应用 1. 背景介绍 1.1 问题的由来 仓储物流行业是全球经济运行的基石之一,涉及商品的存储、运输、分拣和配送等多个环节。随着电子商务的普及和消费者对物流速度和精确性的要求不断提高,仓储物流

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 863

深拷贝

<script> [{}, [], true] // 定义一个深拷贝函数 接收目标target参数 function deepClone(target) { // 定义一个变量 let result; // 如果当前需要深拷贝的是一个对象的话 if (typeof target === 'object') { // 如果

郑怪兽 138

jre9下载 jdk9

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【笔记】JS实现 深拷贝、浅拷贝

1、浅拷贝 Object.assign(target, source1, source2) var initObj = { name: "xiaoming", age: 12, sex:undefined, addAge: function () { return ++this.age; } } var tempObj = {}; Object.assign(tempObj, i...

hamal_ye的博客 2043

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深拷贝和浅拷贝的理解及其实现方式

浅拷贝:只拷贝最外面一层额数据;更深乘次的对象,只拷贝引用; 深拷贝:拷贝多层数据;每一层级别的数据都会拷贝; 拷贝引用的时候,是属于传址,而非传值; 深拷贝和浅拷贝主要针对的是对象的属性是对象(引⽤类型),浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改变原对象。

Hdmi764287459的博客 949

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

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

js 深拷贝

像数组、对象这些变量,我们将其直接赋值给另一个变量,不论改变哪一个变量的值,另一个也会随之改变。 let obj1={name:'a'} let obj2=obj1 obj2.name='b' console.log(obj1.name)// b 为解决这些问题,我们可以采用以下方法。 1、 function deepClone(data){ if(typeof data ==='object' && !(data instanceof RegExp) && !(d

qq_41620202的博客 201

原生js深拷贝

JavaScript有6种基本数据类型 字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(es6引入的一种原始数据类型 表示独一无二)。和3种引用数据类型对象(Object)、数组(Array)、函数(Function)。 对于引用数据类型 当赋值时会引用同一数据地址 例如: 我们会发现 当改变arr1 数...

qq_40710228的博客 254

前端的深拷贝和浅拷贝_[合格中级前端开发必知]聊聊深拷贝浅拷贝

前言js的深拷贝,浅拷贝问题在项目的开发过程中是频繁出现的。对于一个合格的前端开发者来说,对于深刻理解它们是必要的,并能合理使用深拷贝浅拷贝处理问题。什么是深拷贝,什么是浅拷贝以下我对于它们的理解是:深拷贝:如果是对象a和对象b它们是深拷贝,那么它们不再引用统一内存地址了,也就是它们 老死不相往来了。浅拷贝:对象a只是复制指向对象b的指针,而不复制对象本身。新旧对象它们还是共享同一内存。好了,在脑...

weixin_39631899的博客 197

js实现(一层 / 多层)对象/数组的深拷贝

// 深拷贝函数 function deepCopy(obj) { var result = Array.isArray(obj) ? [] : {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] === 'object') { ...

winne雪 3198

微信小程序的重点知识点--递归函数--必须要会的

使用递归函数来实现一个对象的深拷贝 function copy(obj) { let newObj = null; // 声明一个对象来存储拷贝之后的内容 // 判断数据类型是否是复杂的数据类型,如果是则调用自己,如果不是则直接赋值即可! // 由于null不可以循环但是他的类型又是object,所以这个需要对null进行判断 if (typeof(obj) == 'object' && obj !== null){ // 声

yang792508465的博客 792

浅拷贝与深拷贝

一、浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用;所以改变新对象的属性值时,会改变原对象。 Object.assign(target,...sources) 是es6新增方法进行浅拷贝; 二、深拷贝拷贝多层,每一级别的数据都会拷贝;所以改变新对象的属性值时,不会改变原对象。 简便方法:JSON.parse(JSON.stringify(obj)) 使用JavaScript实...

start_XUEBA的博客 320

js浅拷贝和深拷贝

递归是指在函数的定义中使用函数自身的方法。递归必须要有个结束条件,我们称之为出口!//15。

xsm020504的博客 92
上一篇: vue3 vant移动端适配
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值