物件和陣列的淺複製和深複製

2022-03-04 11:35:35 字數 1140 閱讀 1724

之前踩過一些複製的坑,現在總結一下記錄下來,供以後開發時參考,相信對其他人也有用。

淺複製:一般用object.assign,如果支援es6的話也可以用新語法

const obj = ;

//可以用object.assign

const obj2 = object.assign({}, obj1);

//es6的解構

const obj2 = ;

//其實下面這種寫法也可以,但是建議使用上面的寫法

const = obj;

深複製:建議用json.parsejson.stringify方法。

const obj = ;

const obj2 = json.parse(json.stringify(obj));

在如下2種情況下不要用上面的方法:

物件太大了。由於效能關係,耗時太長。

物件不是json不變的,也就是說,json.parse(json.stringify(obj)) != obj。

碰到這2中情況,還是老老實實用遞迴吧。

淺複製:有很多種方法,不過一般用slice:

const a = [2, 3, 5];

//下面的b,c,d都實現了淺複製

const b = a.slice();

const c = a.concat();

const d = [ ...a ];

深複製:這個最好用庫的方法。

使用$.extend方法。

const x =  },

c: [ 1, 2, 3 ]

};const y = $.extend({}, x), //淺複製

z = $.extend(true, {}, x); //深複製

複製陣列和物件的時候一定要注意是不是淺複製。如果只想深複製陣列或物件的部分內容,可以先深複製整個物件,再淺複製得到的物件。(如果要效能的話,也可以看情況手動優化。)

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...

深複製和淺複製

以下 是否完全正確,執行可能得到的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class a class b b void sayhello b b int main 程式正常執行 程式編譯錯誤 程式崩潰 程式死迴圈 這個程式會直接崩潰 voidsayhello ...

深複製和淺複製

main.m 深複製和淺複製。created by yaomars on 16 4 27.import 建立乙個nsdictionary,並建立可變副本和不可變副本,說下是深複製還是淺複製。int main int argc,const char argv 第三種方式 建立乙個nsdictionar...