1. 程式人生 > >關於數組的深度克隆(未完待續)

關於數組的深度克隆(未完待續)

地址 關於 們的 type ++ ole 進行 ray nbsp

我們知道,Array.prototype上有一個slice()方法,可以對數組進行克隆,但是這個方法並不完美。如果一個數組是一維數組,使用slice()方法沒有任何問題,但如果是一個多維數組,那麽這個方法就不是那麽完美了。

1 //一維數組的克隆
2 var ary1 = [1,2,3];
3 var ary2 = ary1.slice();
4 console.log( ary1 === ary2 ) ; // false,ary1和ary2的引用地址不一樣,互不影響

有些時候,我們想復制一個內容一樣,但互不影響的數組,單純使用slice()方法,就不能滿足我們的需求了,如下所示:

1 //多維數組的克隆
2 var ary1 = [1,[2,3]; 3 var ary2 = ary1.slice(); 4 console.log (ary1 === ary2 ); // false,ary1和ary2的引用地址不一樣,互不影響 5 console.log (ary1[1] === ary2[1] ); // true,slice()僅對第一維進行了克隆,但是第二維並沒有克隆,ary1[1]和ary2[1]存儲的是同一個數組的引用地址,所以返回true

我們可以使用遞歸來達到深度克隆的效果。

 1 //多維數組的克隆
 2 function copyAry(ary){
 3     ary=ary.slice(); //
將當前傳入的數組進行第一維克隆 4 // 遍歷數組 5 for(var i=0;i<ary.length;i++){ 6 // 如果第i項存儲的是數組,那麽仍然使用copyAry方法進行克隆 7 if(typeof ary[i]===‘Array‘){ 8 ary[i]=copyAry(ary[i]); 9 } 10 } 11 // 返回克隆後的數組 12 return ary; 13 }

關於數組的深度克隆(未完待續)