js--引用类型Array--3.数组简单复制和深度复制
来源:互联网 发布:adobe cs6 mac 百度云 编辑:程序博客网 时间:2024/06/05 02:42
js数组也是很重要的一块,所以准备对数组的操作等写一个系列。
1.第一部分是二元数组的基础知识。
http://blog.csdn.net/github_34514750/article/details/51049935
2.第二部分讲解数组的几种合并方法优劣比较
http://blog.csdn.net/github_34514750/article/details/51320982
3.本部分讲解数组简单复制和深度复制
对于简单复制中对象只是简单的=复制,也就是只是保存了内存地址,不是完全复制,这样修改对象的时候,会把原对象和复制对象一起修改。
深度复制则是修改复制后的对象不会影响原始对象。
简单复制
对于数组,对象,函数等引用类型的数据,等号只是保存了内存地址,而不是完全复制。
1.使用 slice 或 contcat 方法实现简单复制
简单数组如下:
var arr1 = [1, 2, 3, 4],arr2 = arr1.slice(0),arr3 = arr1.concat();console.log(arr1, arr2, arr3);//[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4],arr2[2] = 10;arr3[2] = 11;console.log(arr1[2], arr2[2], arr3[2]); //3 10 11
有对象和函数或者数组的数组,简单值不一起改变,但是引用类型则原来对象和复制对象一起改变
var fun = function(log) {console.log},arr1 = [1, 2, [3, 4], {a: 5, b: 6}, fun],arr2 = arr1.slice(0),arr3 = arr1.concat();arr1[0] = 10;arr3[2][1] = 5;arr2[3].a = 100;console.log(arr1, arr2, arr3);
深度复制
1.使用jq的$.extend(true,target,obj)
var arr1 = [1, 2, [3, 4], {a: 5, b: 6}, 7],arr2 = $.extend(true, [], arr1);
2.深度复制的完全实现
考虑多维数组的嵌套,以及数组值为对象的情况,可以作如下原型扩展
newobj = Object.create(sourceObj)
Object.prototype.clone = function() { var obj = {}; for(var i in this) { obj[i] = this[i]; } return obj;}Array.prototype.clone = function() { var len = this.lenght, arr = []; for(var i = 0;i < len;i++) { if(typeof this[i] !== "object") { arr.push(this[i]); } else { arr.push(this[i].clone()); } } return arr;}//测试Objectvar obj1 = { name: 'Rattz', age: 20, hello: function () { return "I'm " + name; }};var obj2 = obj1.clone();obj2.age++;console.log(obj1.age);//20//测试2 Arrayvar fun = function(log) {console.log},arr1 = [1, 2, [3, 4], {a: 5, b: 6}, fun],arr2 = arr1.clone();
3.使用JSON方法
newObj = JSON.parse(JSON.stringify(sourceObj));
var arr1 = [1, 2, [3, 4], {a: 5, b: 6}, 7], arr2 = JSON.parse(JSON.stringify(arr1));console.log(arr1, arr2);//[1, 2, [3, 4], {a: 5, b: 6}, 7] [1, 2, [3, 4], {a: 5, b: 6}, 7],arr2[1] = 10;arr2[3].a = 20;console.log(arr1[1], arr2[1]);//2 10console.log(arr1[3], arr2[3]);//{a: 5, b: 6} {a:20,b:6}
0 0
- js--引用类型Array--3.数组简单复制和深度复制
- Js 深度复制数组
- js 基本类型和引用类型 变量复制 参数传递
- js实现引用对象的深度复制
- js 数组复制引用重复的问题
- 数组深度复制
- 数组复制引用问题
- JS深度复制deepCopy
- js数组深复制和浅复制的区别
- js中复制基本类型与复制引用类型值的区别
- javascript 中的引用类型和值类型,复制与拷贝
- JavaScript中的基本类型和引用类型的复制使用
- C++中复制构造函数(深度复制和浅复制(简单叙述))
- 数组(Array)的复制
- js中数组和对象的复制
- JS学习30:对象简单、深度克隆(复制、Clone)
- JS中复制数组
- js数组复制
- Java使用Calendar生成时间的毫秒位问题
- 安卓-Activity生命周期
- javascript 中 unicode 转 UTF8
- const关键字作用总结
- ubuntu16.04配置caffe(CPU版)
- js--引用类型Array--3.数组简单复制和深度复制
- Windows+MinGW5.4+OpenCV3.2+CLion完美搭配
- 《学习openCV》第四章练习题4-6
- ASCII码排序
- R语言--数据集合并、数据增减、不等长合并
- window.setTimeout() 和window.setInterval() 的区别
- 118. Pascal's Triangle
- 异常java.lang.SecurityException: You need MANAGE_USERS permission to……
- 实现一个3D图片轮播插件 —— 更新版