陣列深淺複製

2022-08-19 19:45:12 字數 2188 閱讀 5410

//

1.使用 slice 或 contcat 方法實現簡單複製,簡單值不一起改變,但是引用型別則原來物件和複製物件一起改變

var arr1 = [1, 2, 3, 4

], arr2 = arr1.slice(0

), arr3 =arr1.concat();

console.log(arr1, arr2, arr3);

//[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4],

arr2[2] = 10

; arr3[

2] = 11

; console.log(arr1, arr2, arr3);

//[1, 2, 3, 4] [1, 2, 10, 4] [1, 2, 11, 4],

//但是引用型別則原來物件和複製物件一起改變

var fun =function(log) ,

arr1 = [1, 2, [3, 4], , fun],

arr2 = arr1.slice(0

), arr3 =arr1.concat();

console.log(arr1, arr2, arr3);

arr1[

0] = 10

; arr2[

3].a = 100

; arr3[

2][1] = 5

; console.log(arr1, arr2, arr3);

// object.assign()

var obj = };

var copy = object.assign({}, obj);  //淺拷貝

//因為 object.assign()拷貝的是屬性值。

//假如源物件的屬性值是乙個物件的引用,那麼它也只指向那個引用。

//也就是說,如果物件的屬性值為簡單型別(如string, number),通過object.assign({},srcobj);得到的新物件為深拷貝;

//如果屬性值為物件或其它引用型別,那對於這個物件而言其實是淺拷貝的。

console.log(copy); // 

copy.a=2;

copy.b.d=2

console.log('obj',obj);

console.log('copy',copy);

//

1.0深度複製(1.使用jq的$.extend(true,target,obj))

var arr1 = [1, 2, [3, 4], , 7

], arr2 = $.extend(true

, , arr1);

console.log(

'arr2

',arr2);

arr2[

1]=10

; console.log(

'arr2

',arr1);

console.log(

'arr2

',arr2);

物件的深度複製newobj = object.create(sourceobj)

object.prototype.clone =function() ;

for(var i in

this

)

return

obj;

}陣列的深度複製

array.prototype.clone =function()

else

}return

arr;

}深度複製newobj = json.parse(json.stringify(sourceobj));

var arr1 = [1, 2, [3, 4], , 7

], arr2 =json.parse(json.stringify(arr1));

console.log(arr1, arr2);

//[1, 2, [3, 4], , 7] [1, 2, [3, 4], , 7],

arr2[1] = 10

; arr2[

3].a = 20

; console.log(arr1[

1], arr2[1]);//

2 10

console.log(arr1[3], arr2[3]);//

oc 深淺複製

淺 復 制 在複製操作時,對於被複製的物件的每一層複製都是指標複製。深 復 制 在複製操作時,對於被複製的物件至少有一層複製是物件複製。完全複製 在複製操作時,對於被複製的物件的每一層複製都是物件複製。注 1 在複製操作時,對於物件有n層是物件複製,我們可稱作n級深複製,此處n應大於等於1。2 對於...

深淺複製 2

前面講了深淺複製的概念,而實操中我們會遇到更多的情況 我們可以看到這兩個copywithzone方法在arc下已經是放棄了,這兩個方法的使用非常簡單,一般的格式如下 1.實現nscopying協議 2.實現copywithzone方法 3.呼叫 我們看看結果 結果非常明顯了,這類似於上篇所講的情況,...

Python 深淺複製

python中的賦值語句不複製物件,它們在目標和物件之間建立繫結。對於可變的或包含可變項的容器,有時需要乙個副本,所以可以改變乙個副本而不改變另乙個。將建立乙個新物件,但它包含的是對原始物件包含的項的引用。a b list a c a.copy d copy.copy a 建立乙個新物件,並且遞迴的...