js中数组的复制
导论
在网上翻找了半天,好像没有什么特别的方法,记录一下。首先要明确的是,数组是一种引用,直接用 = 赋值是不行的。
function clone0() {
var array1 = new Array("1","2","3");
var array2 = array1;
array1.length = 0;
alert(array2); //啥也没有,array1和array2指向同一个数组
}
方法1
创建一个新数组,逐个复制数组元素。
function clone1() {
var array1 = new Array("1","2","3");
var len=array1.length;
var array2 = new Array(); //仅仅定义var array2;会报错 Uncaught TypeError: Cannot set property "0" of undefined 为什么?
for(var i=0;i<len;i++)
{
array2[i]=array1[i]; //array2.push(array1[i]); 同理
}
array1.length = 0;
alert(array2); //1,2,3
}
方法2
利用JS的数组操作函数来实现。
function clone2() {
var array1 = new Array("1","2","3");
var array2 = array1.slice(0);
array1.length = 0;
alert(array2); //1,2,3
}
同理:
function clone3() {
var array1 = new Array("1","2","3");
var array2 = array1.concat();
array1.length = 0;
alert(array2);//1,2,3
}
参考:
w3school-slice
w3school-concat
其他
- 二维数组的复制如何处理?
参考:实现JS数组的深拷贝 - 性能对比
参考:javascript 三种数组复制方法的性能对比
反正大意就是自己写一个循环的方法很辣鸡。 - push和concat的区别
push 的定义是:向数组的末尾添加一个或更多元素,并返回新的长度。该方法会改变数组的长度。
concat 的定义是:连接两个或更多的数组,并返回结果。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
var a = [1,2];
alert(a.concat(3,4));//1,2,3,4
alert(a.push(3,4));//4
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 项目后期开发中的项目优化
- 下一篇: 欢迎使用CSDN-markdown编辑器
