javascript对数组进行复制

复制数组:
javascript中操作对象与java一样采用引用的方式,所以如果通过obj2 = obj1的方式进行数组复制的时候,无论对obj2还是obj1所做的修改都同时影响两个变量的值,从而引发不愿意看到的后果。下面介绍两种实现简单数组元素复制的方法。
(1) 借用slice()进行数组的复制
slice() 函数可从已有的数组中返回选定的元素。使用语法为:
arrObject.slice(start,end); //start,开始位置;end,结束位置

slice()函数将会返回一个新的数组对象,所以使用slice(0)就可以实现数组的复制.
测试代码:
var  arr = [1,2,3,4];
  var clone = arr.slice(0);
  arr.splice(1,2);//删除从位置1开始的两个元素
  alert("arr:" + arr + "\nclone:" + clone);//arr:[1,4]   clone:[1,2,3,4]

(2) 借用concat()函数进行数组的复制
concat() 用于进行数组的合并。使用语法为:
arrayObject.concat(arrayX,arrayX,......,arrayX)

concat()用于多个数组的合并,但是返回的结果是一个新的数组,而不再引用用于合并的任何一个数组。可以利用它的这个特性来用一个数组连接空数组或直接不传参数完成clone的功能.
测试代码:
var  arr = [1,2,3,4];
var clone = arr.concat();
arr.splice(1,2);//删除从位置1开始的两个元素
alert("arr:" + arr + "\nclone:" + clone);//arr:[1,4]   clone:[1,2,3,4]

但是,以上两种数组复制的操作都不适合对数组中包括复杂数据类型的数据,如果数组中包括复杂数据类型的数据,对这些数据的修改仍然会同时影响复制数组与被复制数组。所以它并不是一个彻底的能实现深层复制的处理思路。
测试代码:
var arr = [1,2,[1,2,3],4];
  var clone = arr.slice(0);
  arr[2].splice(1,1);//删除从位置1开始的两个元素
  alert("arr:" + arr + "\nclone:" + clone);//arr:[1,2,1,3,4]   clone:[1,2,1,3,4]
如果想要实现深层的对象复制,可以采用下面这个通用的实现对象克隆的函数:
来源:http://www.cnblogs.com/birdshome/archive/2005/03/20/122246.html
 Object.prototype.clone = function()
  {
     var objClone;
     if ( this.constructor == Object ) objClone = new this.constructor(); 
     else objClone = new this.constructor(this.valueOf()); 
     for ( var key in this )
     {
         if ( objClone[key] != this[key] )
         { 
             if ( typeof(this[key]) == 'object' )
             { 
                 objClone[key] = this[key].Clone();
             }
             else
             {
                 objClone[key] = this[key];
             }
         }
     }
     objClone.toString = this.toString;
     objClone.valueOf = this.valueOf;
     return objClone; 
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值