前端代码深浅拷贝四种方式

2023-11-03

今天公司的实习生有问我代码怎么深拷贝

下面我就给大家整理四种前端代码深拷贝的四种方式

前端数据分为基本数据类型引用数据类型,当我们拷贝引用数据类型的时候,我们希望改变新数组(对象)不改变原本的数组(对象),我们往往会深拷贝数据。下面是四种深拷贝数据的方法

深拷贝方式一

首先给大家说一种最简单也最常用一种深拷贝

JSON.parse(JSON.stringify(引用数据类型))

  <script>
    let obj={name:'尚雷砺',age:23,sex:'男'}
    let newObj=JSON.parse(JSON.stringify(obj))
    console.log(obj===newObj);//false
  </script>

深拷贝方式二

在我们的jquery中也可以深拷贝

注意:使用jquery中的深拷贝已经要引入jquery

我这里就使用远程的jquery连接了

 <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
  <script>
    let obj={name:'尚雷砺',age:23,sex:'男'}
    let newObj=$.extend(true, {}, obj);
    console.log(obj===newObj);//false 
  </script>

深拷贝方式三

除了这两种方式,你也可以手写深拷贝

<script>
    const deepCopy = obj => {
      if (obj) {
        var result = Array.isArray(obj) ? [] : {};
        for (var key in obj) {
          if (obj.hasOwnProperty(key)) {
            if (typeof obj[key] === 'object') {
              result[key] = deepCopy(obj[key]);
            } else {
              result[key] = obj[key];
            }
          }
        }
        return result;
      }
    }
    let obj = { name: '尚雷砺', age: 23, sex: '男' }
    let newObj = deepCopy(obj)
    console.log(obj === newObj);//false 
  </script>

浅拷贝方式四

Object.assign()对象的拷贝

Object.assign(target, ...sources)    【target:目标对象】,【souce:源对象(可多个)】

  <script>
    let obj = { name: '尚雷砺', age: 23, sex: '男' }
    let newObj = Object.assign({}, obj);
    console.log(obj === newObj);//false 
  </script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端代码深浅拷贝四种方式 的相关文章

随机推荐

  • 为自己的站点实现访客统计

    简介 我们都很好奇自己的站点有没有被人所熟知 每天能有多少的访问量 最简单的方法便是使用平台的统计功能 比如cnzz 百度统计 谷歌统计等等平台 但这篇文章的重点是自己写代码实现统计功能 一 HTML语句实现 推荐加到页面的底部界面
  • 数组 求上升区间的高度和

    求上升区间的高度和 LC 买卖股票的最佳时机 II 思路 如果上升 则max next pre Objective C 求上升区间的高度和 NSMutableArray array NSMutableArray arrayWithArray
  • Java项目:考试系统(java+JSP+bootstrap+Servlet+Mysql)

    源码获取 俺的博客首页 资源 里下载 项目介绍 本系统分为两个角色 一个是考生 一个是管理员 考生功能如下 登录 选择考试科目 选择考卷 在线考试 提交试卷 并且查询自己的考试成绩 管理员功能如下 登录 添加试卷 并且添加试卷里的题目 编辑
  • Linux(Ubuntu)系统上下载安装Redis

    redis最新版本可以到官网自己下载 这里提供5 0 2的版本 Redis 5 0 2 tar gz网盘资源如下 百度网盘 请输入提取码https pan baidu com s 1ZGy vI7n4RmTb9kLnWe91w压缩包下载完成
  • 使用路由器搭建局域网

    A 如果搭建的是有网局域网 网线插到WAN接口 一般都是蓝色的 买路由器时会自带一条网线 把它的一头插到LAN接口 随便插一个口就行 另一头插到电脑网线接口上就好 B 如果搭建的是无网局域网 路由器只需要接通电源就行 WAN接口不需要插网线
  • 机器学习——SVM的易错题型

    问 支持向量机仅可以用于处理二分类任务 答 错误 支持向量机可以用于处理多分类任务 通过使用一对多或一对一的方法 将多个类别分别与其他类别做二分类 也可以使用多类支持向量机算法 直接将多个类别一起纳入训练和分类过程中 此外 支持向量机还可以
  • YoloV8改进策略:重新思考高效的基于注意力的移动块模型EMO重新定义了轻量化的YoloV8

    文章目录 摘要 论文翻译 EMO 重新思考高效的基于注意力的移动块模型 1 介绍 2 方法论 归纳法和演绎法 2 1 通用效率模型标准 2 2 元移动块 2 3 微设计 倒置残余移动块 2 4 面向密集预测的EMO宏观设计 3 实验 3 1
  • Large Language Models and Knowledge Graphs: Opportunities and Challenges

    本文是LLM系列的文章 针对 Large Language Models and Knowledge Graphs Opportunities and Challenges 的翻译 大语言模型和知识图谱 机会与挑战 摘要 1 引言 2 社区
  • 40道Python经典面试题(附答案)

    1 什么是Python 使用Python有什么好处 Python是一种编程语言 包含对象 模块 线程 异常和自动内存管理 Python的好处在于它简单易用 可移植 可扩展 内置数据结构 并且它是一个开源的 2 什么是PEP 8 PEP 8是
  • uniapp踩坑-使用vue-cli框架对node版本有要求

    uniapp踩坑 使用vue cli框架对node版本有要求 前言 背景 最近在开发uniapp 官方文档提供的开发方式有两种 一种是通过HBulider可视化界面创建 一种是通过vue cli命令行创建 因为可视化更加方便 所以就使用了可
  • 设计算法来统计一个输入字符串中所包含的整数个数,并输出这些数

    设计算法来统计一个输入字符串中所包含的整数个数 并输出这些数 假设输入的字符既有数字又有非数字的字符 例如 ak123x456 17960 302gef4563 其中连续数字作为一个整体看成整数 例如123 456等 include
  • 二进制补码运算

    在计算机系统中 数值一律用补码来表示和存储 原因在于 使用补码 可以将符号位和数值域统一处理 同时 加法和减法也可以统一处理 此外 补码与原码相互转换 其运算过程是相同的 不需要额外的硬件电路 补码运算 正数补码是其原码 负数的补码为其数值
  • react使用dnd实现简单的拖拽排序

    在react项目中使用dnd实现一个简单的拖拽排序功能 首先简单的介绍一下dnd React DnD是一组React实用程序 可帮助您构建复杂的拖放界面 同时保持组件之间的耦合 1 DndProvider组件为您的应用程序提供React D
  • Vue 3 快速上手

    Vue 3 快速上手 官网 配置环境变量和nodejs node vue 开发环境搭建 第二天的时候 vue create xxx xxx xxx 项目名 失败 前端项目问题解决 第二天修改环境配置之后 纠正之后 概念 思想 创建项目 cm
  • 国产适配之MySQL替换为达梦8数据库

    1 背景 项目中要做国产化 MySQL要替换成达梦8数据库 项目中MySQL的建表语句和内置数据通过 sql文件维护 安装时会初始化表结构和表内置数据 项目架构为SpringBoot JPA Mybatis 适配工作内容包括数据库迁移 数据
  • Vue实现点击更改页面字体大小

    html 1 点击大中小 页面字体会切换到对应的css样式 2 big mid sml 代表预设定了三种字体大小 3 on 代表当前选中了哪一个的样式 big min sml 选中后字体加粗 4 v html 利用后端传来的页面数据 通过v
  • text段、data段和bss段知识介绍

    一 总体概述 1 bss 可读可写 bss是英文Block Started by Symbol的简称 通常是指用来存放程序中未初始化的全局变量的一块内存区域 在程序载入时由内核清0 BSS段属于静态内存分配 它的初始值也是由用户自己定义的连
  • go语言基础2——流程控制if、for、switch、goto、break、continue

    目录 if else 分支结构 if条件判断基本写法 if条件判断特殊写法 for 循环结构 无限循环 for range 键值循环 switch case goto 跳转到指定标签 break 跳出循环 continue 继续下次循环 练
  • html手风琴效果代码,一款漂亮的纯CSS手风琴效果代码

    本文分享了纯css实现的手风琴 喜欢的朋友可以看看 源码CSS部分 accordionMenu width 500px margin 0 auto padding 10px background size fff color 424242
  • 前端代码深浅拷贝四种方式

    今天公司的实习生有问我代码怎么深拷贝 下面我就给大家整理四种前端代码深拷贝的四种方式 前端数据分为基本数据类型和引用数据类型 当我们拷贝引用数据类型的时候 我们希望改变新数组 对象 不改变原本的数组 对象 我们往往会深拷贝数据 下面是四种深