JavaScript深拷贝和浅拷贝数组
来源:互联网 发布:windows源代码谁写的 编辑:程序博客网 时间:2024/06/10 19:59
javascript分原始类型与引用类型(与java、c#类似)。Array是引用类型,直接用“=”号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,并没有实现数组的数据的拷贝。这种方式的实现属于浅拷贝。
对一维数组和多维数据的深拷贝实现方式是不一样的。
一、一维数组的实现方式:
使用slice() 或者 concat()来实现一维数组的深拷贝,但这种方法只适用于一维数组,对多维数组无效。
arrayObj.slice(start,[end]):
可使用slice()进行复制,因为slice()返回也是数组。slice方法是通过参数start和end的传入值来返回数组中的一段,该方法不对原数组进行操作。slice(0)代表返回所有项。
var array1 = new Array("1","2","3"); var array2; array2 = array1.slice(0); array1.length = 0; alert(array2); //返回1、2、3
注意concat()返回的并不是调用函数的Array,而是一个新的Array,所以可以利用这一点进行复制。
var array1 = new Array("1","2","3"); var array2; array2 = array1.concat(); array1.length = 0; alert(array2); //返回1、2、3
二、多维数组的JS函数实现方式:
function deepcopy(obj) { var out = [],i = 0,len = obj.length; for (; i < len; i++) { if (obj[i] instanceof Array){ out[i] = deepcopy(obj[i]); } else out[i] = obj[i]; } return out; } //下面是测试代码 var weekArray = new Array(7);//数组第一维 var timeTableArray = new Array(); //数组第二维 var lineArray = new Array(4); //数组第三维 lineArray[0] = "1_a"; lineArray[1] = "1_b"; lineArray[2] = "1_c"; timeTableArray.push(lineArray); weekArray[0] = deepcopy(timeTableArray); //清空,并添加其他星期的数据 lineArray.splice(0,lineArray.length); timeTableArray.splice(0,timeTableArray.length); lineArray[0] = "7_a"; lineArray[1] = "7_b"; lineArray[3] = "7_d"; timeTableArray.push(lineArray); weekArray[7] = deepcopy(timeTableArray); alert("weekArray=" + weekArray[0]);//返回 "1_a,1_b,1_c," alert("weekArray=" + weekArray[7]);//返回 "7_a,7_b,,7_d"
三、 多维数组的jquery实现方式:
把上述的deepcopy函数用下面的函数替代即可
weekArray[0] = $.extend(true, {}, timeTableArray);
阅读全文
0 0
- JavaScript深拷贝和浅拷贝数组
- javascript中的深拷贝和浅拷贝
- javascript 深拷贝和浅拷贝
- JavaScript深拷贝和浅拷贝
- JavaScript深拷贝和浅拷贝
- javascript中的浅拷贝和深拷贝
- JavaScript的深拷贝和浅拷贝
- javascript中的深拷贝和浅拷贝?
- JavaScript 的深拷贝和浅拷贝
- javaScript中的浅拷贝和深拷贝
- JavaScript:浅拷贝和深拷贝
- JavaScript 的深拷贝和浅拷贝
- javascript深拷贝和浅拷贝
- javascript深拷贝和浅拷贝
- JavaScript中的深拷贝和浅拷贝
- javascript中的深拷贝和浅拷贝?
- JavaScript之浅拷贝和深拷贝
- javascript中的深拷贝和浅拷贝
- 来说说组件(Components)模式
- Tensorflow CIFAR-10训练例子报错解决
- PLC编程时三个注意事项
- 安装DPDK
- 垂直居中
- JavaScript深拷贝和浅拷贝数组
- hadoop集群使用sklearn进行模型训练
- OpenGL蓝宝书源码学习(十八)第六章——ADS光照模型
- 解决SVN造成的桌面图标问号
- 一些重要的连接
- idea列操作快捷键
- 临时对象和局部对象以及函数返回值优化
- TextBox中只能输入数字的几种常用方法(C#)
- 移动端Vin码识别技术发展应用