您的位置:首页 > Web前端 > JavaScript

js中数组的复制

2016-07-06 16:29 435 查看

导论

在网上翻找了半天,好像没有什么特别的方法,记录一下。首先要明确的是,数组是一种引用,直接用 = 赋值是不行的。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: