一维数组与对象深拷贝的几种方法(指数组、对象中均无嵌套)

2023-10-27

一、万能for循环

直接上代码:

  var arr = [1, 2, 3, 4, 5]
  var obj = { name: "aaaaa", age: 16 }
  var arr2 = copyThat(arr)
  var obj2 = copyThat(obj)
  function copyThat(obj) {
    let resArr = [];
    let resObj = {};
    if (Array.isArray(obj)) {
      for (let i = 0; i < obj.length; i++) {
        resArr.push(obj[i])
      }
      return resArr
    } else {
      for (x in obj) {
        resObj[x] = obj[x]
      }
      return resObj
    }
  }

二、利用扩展运算符(嘎嘎简单)


代码举例:

  var arr = [1, 2, 3, 4, 5]
  var obj = { name: "aaaaa", age: 16 }
  var [...newArr] = arr
  var { ...newObj } = obj

三、利用JSON左右互搏

先把要拷贝的对象转换成json字符串,再把json字符串转换成JavaScript对象,最后用一个变量接收就好啦~

var obj = {
  name: '小明',
  age: '18'
}
var obj2 = JSON.parse(JSON.stringify(obj))

四、Object.assign()方法

Object.assign(target, source_1, ···)
用于将源对象 (source) 的所有可枚举属性复制到目标对象 (target) 中,源对象参数可以不止有一个。

利用Object.assign()方法, 第一个参数 (目标对象) 必须是空对象。
且如文章题目所示,此方法也只能深度拷贝对象的第一层,如果对象中的属性也是对象的话,是没有办法进行深拷贝的。

var obj = {name:'小明',age:16};
var obj2 = Object.assign({},obj1);

两个其它的数组深拷贝方法:

  1. concat() 方法实现数组的深拷贝:
    concat() 方法用于连接两个或多个数组,该方法不会改变现有的数组,所以我们只要将源数组和一个空数组拼接在一起就好啦
var arr = [1,2,3,4,5]
var arr2 = arr.concat()
arr[2] = 5
console.log(arr)
console.log(arr2)
  1. slice() 方法实现数组的深拷贝:
    slice() 方法可从已有的数组中返回选定的元素,参数为 start 和 end,都是可选参数,如果不指定end参数则会切割从start处开始,一直到数组结束的所有元素。
    所以我们将 start 指定为0,并且不指定end就好咯~
var arr = [1,2,3,4,5]
var arr2 = arr.slice(0)
arr[2] = 5
console.log(arr)
console.log(arr2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一维数组与对象深拷贝的几种方法(指数组、对象中均无嵌套) 的相关文章

随机推荐

  • js对象方法Object.assign( )详解

    1 基本用法 Object assign方法用于对象的合并 将源对象 source 的所有可枚举属性 复制到目标对象 target var target a 1 var source1 b 2 var source2 c 3 Object
  • neo4j--Cypher查询调优与执行计划

    1 查询调优 1 1查询如何执行 Cypher执行引擎会将每个Cypher查询都转为一个执行计划 在执行查询时 执行计划将告知Neo4j执行什么样的操作 1 2查询性能分析 查看执行计划对查询进行分析时有两个Cypher语句可用 1 2 1
  • 关系型数据库和非关系型数据库类比

    1 关系型数据库 关系型数据库 是指采用了关系模型来组织数据的数据库 关系模型是在1970年由IBM的研究员E F Codd博士首先提出的 在之后的几十年中 关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型 简单来说 关系模
  • win10 WMDC安装

    解决方案 WMDC in Windows 10 junipersys com 参考连接 Previous WMDC fixes for Windows 10 junipersys com amd64 https junipersys com
  • linux中把程序启到前台,Linux程序前台后台切换

    1 在Linux终端运行命令的时候 在命令末尾加上 符号 就可以让程序在后台运行 root Ubuntu tcpserv01 2 如果程序正在前台运行 可以使用 Ctrl z 选项把程序暂停 然后用 bg number 命令把这个程序放到后
  • 知乎爬虫经验教程

    为了完成课程论文研究 暑假写了关于知乎的爬虫 把用户主页 回答中能爬到的数据全都爬下来了 接下来 把我踩过的坑跟大家分享 希望大家少走一些弯路 1 导入一些必要的python包 其中会包括我们接下来要使用的函数 import re impo
  • 疯壳AI人脸及语音识别教程2-8WIFI-TCP网络通信

    详情地址 https fengke club GeekMart views offline ai 购买链接 https fengke club GeekMart su fKw7Nb7oC jsp 视频地址 https fengke club
  • iOS 开发中的争议(二)UI到底应该用xib/storyboard完成,还是用手写代码来完成?

    文章来源 http www devtang com blog 2015 03 22 ios dev controversy 2 参考文章 关于代码手写UI xib和StoryBoard http blog csdn net likendsl
  • 用Sutherland-Hodgman算法实现裁剪任意凸多边形

    一 实验目的 用Sutherland Hodgman算法实现裁剪任意凸多边形 二 实验工具 VC6 0 三 实验步骤 思想 每次用窗口的一条边界以及其延长线来裁剪多边形 裁剪得到的多边形的顶点由两部分组成 落在可见一侧的原多边形顶点 多边形
  • 【论文阅读】APDrawingGAN:利用分层GAN从面部照片生成艺术人像

    APDrawingGAN Abstract Introduction Related Work APDrawingGAN 概述 网络结构 生成器Generator 判别器Discriminator 损失函数 训练网络 通过预训练进行初始化
  • Mongodb入门安装

    标题 1 MongoDb 概念入门 什么是MongoDB MongoDB 使用场景 不使用MongoDB 的场景 2 MongoDB 应用与开发 安装 启动mongodb 1 MongoDb 概念入门 什么是MongoDB MongoDB
  • 四种信号量

    传送门 1 整型信号量 2 记录型信号量 3 AND型信号量 4 信号量集 例 应用信号量实现同步与互斥 说在前 信号量机制是对具体物理资源的抽象 同类资源的个数用 gt 0的信号量值来表示 0或1的则为临界资源 1 整型信号量 1 1 D
  • 自定义Weex组件——Weex的学习之路(八)

    在四月份和五月份的时候我用业余时间来学习weex 在这期间一直在看文档写demo 每一个组件都自己写demo运行一遍 我本人是做Android开发的 对JS CSS和Html有一定的了解 所以学习weex不是很难 然后我把自己所学的主要经历
  • 一种基于Harris-Laplace算法的角点检测方法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 Harris Laplace 检测方法原理 2 运行结果 3 Matlab代码实现 4 参考文献
  • 深度学习目标检测方法汇总

    目标检测简介 目标检测是计算机视觉的一个重要研究方向 是指从一个场景 或图片 中找到感兴趣的目标 任务大致分为三个流程 从场景中提取候选区 从候选区提取特征 识别候选区的类别并对有效的候选框进行位置精修 目标检测在生活的各个领域都有了广泛的
  • 算法 数列异或操作

    给你两个整数 n和start 其中n为数据的数量 start为第一个数据 当前数据定义为 num start 2 i i表示第几个数据 从0开始 请返回数列中所有数据按位异或 XOR 后得到的结果 示例 1 输入 n 5 start 0 输
  • Kali Linux 下搭建DVWA靶场和Sqli-labs注入环境

    Kali Linux 下搭建DVWA靶场和Sqli labs注入环境 DVWA靶场介绍 DVWA是一款基于PHP和mysql开发的web靶场练习平台 集成了常见的web漏洞如sql注入 xss 密码破解等常见漏洞 适合刚基础网络安全的小白
  • pytorch中的 relu、sigmoid、tanh、softplus 函数

    四种基本激励函数是需要掌握的 1 relu 线性整流函数 Rectified Linear Unit ReLU 又称修正线性单元 是一种人工神经网络中常用的激活函数 activation function 通常指代以斜坡函数及其变种为代表的
  • GMAC RGMII时序校准配置教程

    GMAC RGMII时序校准配置教程 在物联网时代 各种设备都需要联网 而其中以嵌入式系统为主 网络通信系统的核心部件即为MAC与PHY芯片 而针对MAC和PHY芯片之间的接口 有一种双数据率的接口标准 RGMII Reduced Giga
  • 一维数组与对象深拷贝的几种方法(指数组、对象中均无嵌套)

    一 万能for循环 直接上代码 var arr 1 2 3 4 5 var obj name aaaaa age 16 var arr2 copyThat arr var obj2 copyThat obj function copyTha