一、万能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] = arrvar { ...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)

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

  1. js数组查找最接近_js 2种方法从数组里面找到最接近某个数值的值(小于该指定值,并且大于其他值)...

    1.用于递归查找 var arr = [6,8,1,6,8,7,9,10,11,55,74,12,3,5,6,8,9,4,2,3,5,4,86,31,5] let testStr = 0 let te ...

  2. PHP获取数组最后一个值的2种方法

    这篇文章主要介绍了PHP获取数组最后一个值的2种方法,本文直接给出实现代码,代码中包含注释,需要的朋友可以参考下 代码如下: $array=array(1,2,3,4,5);     echo $ar ...

  3. 遍历对象属性_细说JS遍历对象属性的N种方法

    本人详细介绍了JS遍历对象N种方法,欢迎关注收藏. 遍历对象属性有五种方法,下图为一个场景对比图. 可以注意到两点: 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性. Objec ...

  4. 获取php数组最后,php获取数组最后一个值的2种方法

    摘要:这篇文章主要介绍了PHP获取数组最后一个值的2种方法,本文直接给出实现代码,代码中包含注释,需要的朋友可以参考下$array=array(1,2,3,4,5); echo $array[coun ...

  5. js算法数组flat展平的几种方法

    数组的展平,主要是指的是数组嵌套数组转为一维数组,总结了一下几种方法 es6原生的方法 链接: es6中的flat let arr = [1, 2, [3, 4]].flat() console.lo ...

  6. JS数组移除元素的八种方法

    JS数组移除元素的八种方法 一.修改arr的length方法 let arr = [1,2,3,4,5,6,7,8,9]; arr.length = 3; console.log('length',a ...

  7. 二维数组赋初值你会几种方法?

    二维数组赋初值你会几种方法 文章目录 方法一 方法二 方法三 方法四 方法五 方法一 分行给二维数组赋初值: int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,1 ...

  8. 五种方法创建 Java 对象,你知道几种呢?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 网络 五种方法创建java对象 作为Java开 ...

  9. php数组如何写入txt文件中_php将数组写入到文件的三种方法

    php的数组十分强大,有些数据不存入数据库直接写到文件上,用的时候直接从文件中读取,本文章向大家介绍php将数组写入到文件的三种方法. 第一:serialize方法 使用 serialize 将数组序 ...

最新文章

  1. SQL语言之子查询(Oracle)
  2. arm-none-eabi-gcc install
  3. gitlab添加用户
  4. html5表单实现简单计算器
  5. 爱的十个秘密--3.尊重的力量
  6. 免装版_一款好用的便签工具 桌面便签免安装版
  7. 世界著名汽车标志欣赏
  8. html5点击刷新的效果,HTML5 手机屏幕下拉(下刷)动作的弹性刷新效果
  9. uva-10177 - (2/3/4)-D Sqr/Rects/Cubes/Boxes?
  10. 验收测试:α测试(Alpha 测试 )、β测试(beta测试)
  11. 爬取知乎,通过数据传输接口
  12. 阿拉伯数字转韩文、中文
  13. Android 如何获取手机内存大小,内置存储空间大小
  14. Android showStatusIcon on inactive InputConnection异常
  15. 解决Windows端口占用问题(port is already in use)
  16. Linux--常用命令--dmesg
  17. java 三点_[Java教程]三点运算符使用方法
  18. mysql redis缓存配置_SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
  19. 新视野大学英语第三版读写教程2答案
  20. js贝塞尔曲线cubic-bezier 模拟实现附UnitBezier.h

热门文章

  1. 时隔3年,摄影网站依旧可用,果然靠谱,Python爬虫100例,第2篇复盘文章
  2. Themida/WinLicense.V1.8.2.0 的Anit OllyDBG新方法
  3. 跟涛哥一起学嵌入式 25:我接触过近50块嵌入式开发板,分享一下教训和总结...
  4. echarts的基本使用及其插件下载
  5. CSUOJ 1726 你经历过绝望吗?两次!(BFS + 优先队列)
  6. 处理海量数据之awk命令
  7. 招聘:IT-互联网相关职位。如:手机客户端、iphone\ios\、PHP 开发工程师,产品经理...
  8. nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)六 在express中建立路由
  9. Android仿支付宝咻一咻动画
  10. 计算机硬件和工作原理,课题计算机硬件和基本工作原理