1、对于普通数组(数组元素为数字或者字符串),深拷贝很简单,拷贝之后两个数组指针指向的存储地址不同,从而完成深拷贝

var _test = [1,2,3];//原数组
var _testCopy = [].concat(_test);//拷贝数组
_testCopy[0]=4;
console.log(_test);// [1,2,3]
console.log(_testCopy);//[4,2,3]

2、对于对象数组

//形如
var _objArr=[{"name":''weifeng"},{"name":"boy"}]

如果还是利用上述的[].concat()方法拷贝数组,则获取的结果仍然是浅拷贝,改变其一,统统改变,例子:

var _test = [{"name":"weifeng"},{"name":"boy"}];//原数组
var _testCopy = [].concat(_test);//拷贝数组
_testCopy[1].name="girl";
console.log(_test);// [{"name":"weifeng"},{"name":"girl"}]
console.log(_testCopy);//[{"name":"weifeng"},{"name":"girl"}]

从例子上可以看出,这种对于对象数组的拷贝,由于数组内部属性值为引用对象,因此整个拷贝还是浅拷贝,拷贝之后数组各个值的指针还是指向相同的存储地址,
那么,如何完成此类数组的深拷贝,根据普通数组的深拷贝得到启发,我拷贝一个字符串,不拷贝引用对象,拷贝字符串会新辟一个存储地址,这样就切断了引用对象的指针联系,因此,得到的方法为:

var _test = [{"name":"weifeng"},{"name":"boy"}];//原数组
var _testCopy = [].concat(JSON.parse(JSON.stringify(_test)));//拷贝数组,注意这行的拷贝方法
_testCopy[1].name="girl";
console.log(_test);// [{"name":"weifeng"},{"name":"boy"}]
console.log(_testCopy);//[{"name":"weifeng"},{"name":"girl"}]

至此,大功告成,一行代码完成对象数组的深拷贝!

此文章为转载,传送门:https://blog.csdn.net/xiongqiangwin1314/article/details/53184638

转载于:https://www.cnblogs.com/longxx/p/9376405.html

一行代码完成js对象数组的深拷贝相关推荐

  1. js对象数组计算总计_如何计算数组中的对象

    js对象数组计算总计 Knowing how to quickly iterate through an array and count objects is deceptively simple. ...

  2. 有一个List集合,里面存储了5个Student对象。Student有姓名、年龄和成绩属性,按照多个属性进行排序(一行代码解决list对象集合排序问题)。

    有一个List集合,里面存储了5个Student对象.Student有姓名.年龄和成绩属性,按照要求进行排序(一行代码解决list对象集合排序问题). 要求对List集合进行排序,排序规则是: 1.先 ...

  3. js对象数组根据某一属性查找对象

    js对象数组[{name: "zhangsan", age: 20}, {name: "lisi", age: 30}], 如果想查找name是zhangsan ...

  4. JS对象数组去重简单有效方法

    I.输入 JS对象数组去重是业务经常遇到的方法,稍微简洁一点的方法,如下: var data = [{"id": 1, "name": "李四1&qu ...

  5. JS对象拷贝:深拷贝和浅拷贝

    摘要:对象拷贝,简而言之就是将对象再复制一份,但是,复制的方法不同将会得到不同的结果. 本文分享自华为云社区<js对象深浅拷贝,来,试试看!>,作者: 北极光之夜.. 一.速识概念: 对象 ...

  6. js对象、数字深拷贝方式(转)

    知识点一:js中的对象 谈到对象的拷贝,必定要说一下对象的概念.js中的数据类型分为两大类:原始类型和对象类型.(1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原 ...

  7. android 接收js对象数组,java怎么接收js 数组对象数组对象

    java怎么接收js 数组对象数组对象 [2021-02-04 22:25:34]  简介: php数组转js数组对象的方法:首先获取[$arr]数组:然后使用函数[json_encode()]将数组 ...

  8. 扩展js对象数组的OrderByAsc和OrderByDesc方法

    看了一段时间关于js原型的知识,js的扩展方法是基于原型的,如Array.prototype.XXXX就是给Array扩展XXX方法,然后数组都能使用这个方法了. 在对象数组里面经常有根据属性来进行排 ...

  9. js对象浅拷贝与深拷贝

    一.简介    浅拷贝是拷贝一层,如果数据是基本数据类型,会拷贝其本身,如果除了基本数据类型之外还有一层对象,那么只能拷贝其引用,对象的改变会反应到拷贝对象上.    深拷贝是拷贝多层,每一层的数据都 ...

最新文章

  1. php对提交数据的验证
  2. Android之自定义Adapter的ListView
  3. python 把if 写在一行的两种方式
  4. [模板]欧几里得算法/扩展欧几里得
  5. 向量点乘 推导及应用
  6. kafka吞吐量高的原因
  7. 隐藏域input里面放当前时间_【小A问答】Win10的隐藏小秘密,被我发现了!
  8. 用if写一个备份mysql的脚本
  9. oracle 设置忽略关键字,记oracle里continue关键字的陷阱
  10. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
  11. 不好意思昨天断更了,今天聊聊创业
  12. 10.1 意境级讲解关系抽取
  13. Android studio 突然 无法解析符号
  14. 文字处理技术:布局的核心是行布局,难点是换行算法
  15. vue实现钉钉扫码登录
  16. oracle g1 gc,G1 GC日志分析
  17. 如何自定义快捷方式图标为自己的图片(保姆级教程)
  18. python获取北京时间
  19. 冰刃(icesword) V1.22 Beta1┊查探系统中幕后黑手-木马后门┊英文绿色免费版
  20. React项目中提示caniuse-lite已过时,建议更新

热门文章

  1. myeclipse java maven web 项目结构,Myeclipse 10 Maven 构建 Java Web 项目
  2. 模式识别与智能系统和计算机视觉,天津大学模式识别与智能系统
  3. python培训比较好的机构有哪些-上海python培训比较好的机构
  4. 小程序服务器角色,小程序在我们的生活中扮演什么角色?
  5. 【百家稷学】深度学习在计算摄影中的方法与应用(vivo技术分享)
  6. 【AI-1000问】为什么OpenCV读取的图像格式是BGR?
  7. 深度学习的150多篇文章和10多个专栏推荐
  8. 如何降低遮挡对人脸识别的影响
  9. 全球及中国水软化盐行业消费规模及市场现状调研分析报告2022-2027年
  10. 中国新能源商用车行业投资现状及前景规划分析报告2022-2027年版