牛骨文教育服务平台(让学习变的简单)
博文笔记

js中数组的复制

创建时间:2016-07-06 投稿人: 浏览次数:413

导论

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

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

其他

  1. 二维数组的复制如何处理?
    参考:实现JS数组的深拷贝
  2. 性能对比
    参考:javascript 三种数组复制方法的性能对比
    反正大意就是自己写一个循环的方法很辣鸡。
  3. push和concat的区别
    push 的定义是:向数组的末尾添加一个或更多元素,并返回新的长度。该方法会改变数组的长度。
    concat 的定义是:连接两个或更多的数组,并返回结果。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
var a = [1,2];  
alert(a.concat(3,4));//1,2,3,4  
alert(a.push(3,4));//4  
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。