一行代码完成js对象数组的深拷贝
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对象数组的深拷贝相关推荐
- js对象数组计算总计_如何计算数组中的对象
js对象数组计算总计 Knowing how to quickly iterate through an array and count objects is deceptively simple. ...
- 有一个List集合,里面存储了5个Student对象。Student有姓名、年龄和成绩属性,按照多个属性进行排序(一行代码解决list对象集合排序问题)。
有一个List集合,里面存储了5个Student对象.Student有姓名.年龄和成绩属性,按照要求进行排序(一行代码解决list对象集合排序问题). 要求对List集合进行排序,排序规则是: 1.先 ...
- js对象数组根据某一属性查找对象
js对象数组[{name: "zhangsan", age: 20}, {name: "lisi", age: 30}], 如果想查找name是zhangsan ...
- JS对象数组去重简单有效方法
I.输入 JS对象数组去重是业务经常遇到的方法,稍微简洁一点的方法,如下: var data = [{"id": 1, "name": "李四1&qu ...
- JS对象拷贝:深拷贝和浅拷贝
摘要:对象拷贝,简而言之就是将对象再复制一份,但是,复制的方法不同将会得到不同的结果. 本文分享自华为云社区<js对象深浅拷贝,来,试试看!>,作者: 北极光之夜.. 一.速识概念: 对象 ...
- js对象、数字深拷贝方式(转)
知识点一:js中的对象 谈到对象的拷贝,必定要说一下对象的概念.js中的数据类型分为两大类:原始类型和对象类型.(1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原 ...
- android 接收js对象数组,java怎么接收js 数组对象数组对象
java怎么接收js 数组对象数组对象 [2021-02-04 22:25:34] 简介: php数组转js数组对象的方法:首先获取[$arr]数组:然后使用函数[json_encode()]将数组 ...
- 扩展js对象数组的OrderByAsc和OrderByDesc方法
看了一段时间关于js原型的知识,js的扩展方法是基于原型的,如Array.prototype.XXXX就是给Array扩展XXX方法,然后数组都能使用这个方法了. 在对象数组里面经常有根据属性来进行排 ...
- js对象浅拷贝与深拷贝
一.简介 浅拷贝是拷贝一层,如果数据是基本数据类型,会拷贝其本身,如果除了基本数据类型之外还有一层对象,那么只能拷贝其引用,对象的改变会反应到拷贝对象上. 深拷贝是拷贝多层,每一层的数据都 ...
最新文章
- php对提交数据的验证
- Android之自定义Adapter的ListView
- python 把if 写在一行的两种方式
- [模板]欧几里得算法/扩展欧几里得
- 向量点乘 推导及应用
- kafka吞吐量高的原因
- 隐藏域input里面放当前时间_【小A问答】Win10的隐藏小秘密,被我发现了!
- 用if写一个备份mysql的脚本
- oracle 设置忽略关键字,记oracle里continue关键字的陷阱
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
- 不好意思昨天断更了,今天聊聊创业
- 10.1 意境级讲解关系抽取
- Android studio 突然 无法解析符号
- 文字处理技术:布局的核心是行布局,难点是换行算法
- vue实现钉钉扫码登录
- oracle g1 gc,G1 GC日志分析
- 如何自定义快捷方式图标为自己的图片(保姆级教程)
- python获取北京时间
- 冰刃(icesword) V1.22 Beta1┊查探系统中幕后黑手-木马后门┊英文绿色免费版
- React项目中提示caniuse-lite已过时,建议更新
热门文章
- myeclipse java maven web 项目结构,Myeclipse 10 Maven 构建 Java Web 项目
- 模式识别与智能系统和计算机视觉,天津大学模式识别与智能系统
- python培训比较好的机构有哪些-上海python培训比较好的机构
- 小程序服务器角色,小程序在我们的生活中扮演什么角色?
- 【百家稷学】深度学习在计算摄影中的方法与应用(vivo技术分享)
- 【AI-1000问】为什么OpenCV读取的图像格式是BGR?
- 深度学习的150多篇文章和10多个专栏推荐
- 如何降低遮挡对人脸识别的影响
- 全球及中国水软化盐行业消费规模及市场现状调研分析报告2022-2027年
- 中国新能源商用车行业投资现状及前景规划分析报告2022-2027年版