在開發過程中,相信大家都遇見過以下情況
1.現象:陣列套物件,將陣列定義為新陣列,修改新陣列物件屬性值,原陣列也會發生變化
解決方案:使用深拷貝
2.現象:物件套物件,將物件定義為新物件,修改新物件物件屬性值,原物件也會發生變化
解決方案:使用深拷貝
3.現象:純物件,將物件定義為新物件,修改新物件屬性值,原物件也會發生變化
解決方案:使用淺拷貝或深拷貝
長話短說,最大的區別就是,淺拷貝,拷貝的是對第一層屬性的拷貝,深拷貝是對所有層級的拷貝
對於如何進行深拷貝和淺拷貝,輪子方法的話,有千萬種,每個程式猿都可以寫,這裡我三種我經常使用的方法
1.使用json,先轉化為字串再轉化為json格式
let new_obj = json.parse(json.stringify(copy_obj));
2.使用lodash的深拷貝方法
let _ = require("lodash");
let new_obj = _.clonedeep(copy_obj);
1.使用object.assign
let new_obj = object.assign({},copy_obj )
我是默然,今日鼓勵:要保持希望在每天清晨太陽公升起。 物件陣列的深拷貝和物件的深拷貝
1 對於 普通陣列 陣列元素為數字或者字串 深拷貝很簡單,拷貝之後兩個陣列指標指向的儲存位址不同,從而完成深拷貝 var test 1,2,3 原陣列 var testcopy concat test 拷貝陣列 testcopy 0 4 console.log test 1,2,3 console....
淺拷貝帶來的問題以及用深拷貝解決方案
淺拷貝帶來的問題 include using namespace std class person person const person a 自己其實不需要寫拷貝建構函式,因為c 編譯器會自動幫你寫 但是如果屬性有在堆區開闢的,就一定要自己寫,防止淺拷貝帶來的重複delete同一塊堆區記憶體的問題...
js陣列,物件深拷貝
無事,封裝了乙個js深拷貝的方法 基本思路 deepcopy data data 可能是陣列也可能是物件 1.判斷data是陣列 物件或者其他資料型別 2.宣告空陣列 或者 空物件 res 3.分別處理 如果陣列元素或物件屬性值不是陣列或物件,空陣列或物件之間接收元素 res.push data i...