一行代码完成js对象数组的深拷贝
来源:互联网 发布:phpstorm mac 激活 编辑:程序博客网 时间:2024/06/01 09:38
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"}]
至此,大功告成,一行代码完成对象数组的深拷贝!
- 一行代码完成js对象数组的深拷贝
- JS数组和对象的深拷贝
- js数组及对象的深拷贝
- js 对象和数组的深拷贝
- js数组、对象深拷贝
- 分享2个功能的js代码(去掉数组里重复的项、数组或对象深拷贝)
- js 数组对象的深浅拷贝
- js 数组和对象的深度拷贝
- JS中深拷贝数组、对象、对象数组方法
- JS中深拷贝数组、对象、对象数组方法
- JS中深拷贝数组、对象、对象数组方法
- JS对象的深拷贝
- js 对象的深拷贝
- JS遍历对象属性(一行狗代码的事)
- 关于对象/数组的深拷贝
- js深拷贝对象
- JS对象深拷贝
- js对象深拷贝
- 第3讲 微信商城云服务器后台创建
- JS 中的类型转化
- Multiple annotations found at this line
- 二、大话设计模式 之 策略模式
- 获得页面url的某个url参数的方法
- 一行代码完成js对象数组的深拷贝
- jQuery位置、CSS和尺寸
- 那些年,用swift第三方打包成.framework的问题
- 数据库中根据经伟度排序查询
- pg_rewind
- 【经验】轻量化阅读源码初体验sublime+gradlew命令
- 手动开发动态资源、工具开发动态资源
- mysql中文乱码解决方法
- UNION操作符的用法