關於json物件的深拷貝

2022-01-15 04:23:31 字數 938 閱讀 3258

前兩天寫程式,有乙個是對後台返回的json資料進行整理然後再使用,用到了關於json 的拷貝。我在我的一篇部落格中提到過對陣列的拷貝。分為深度拷貝,和淺拷貝。這裡附上鏈結 其實對於陣列的拷貝是比較簡單的,大不了就自己迴圈一下,然後放到乙個新陣列中,或者是在我部落格中提到的使用 slice(0) 的辦法。 

同樣的關於json資料的拷貝也有相同的簡單方法,var 新物件 = json.parse(json.stringify(老物件));這樣就複製這個老物件了。但是這樣會有乙個弊端。(對於後台傳輸過來的資料是沒有問題的)。弊端就是如果這個老物件中不僅僅是簡單的資料,而是其中定義了方法的話,那麼這樣的話,是不能賦值成功的。

那這樣的話,是不是就只能自己寫方法,自己寫程度複製了呢。答案是不是。因為es6已經想到了這一點,所以在es6的語法中就有乙個叫做object.assign()的方法,官方對於這個方法是這樣解釋的:object.assign()方法用於將所有可列舉屬性的值從乙個或多個源物件複製到目標物件。它將返回目標物件。如果目標物件中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。後來的源的屬性將類似地覆蓋早先的屬性。然後咱們就可以開開心心的複製了。請看下面的**

1

var json1 =7}

8//json1.fun(123);

9console.log(json1);

10for(i in

json1)14}

15var json2 =json.parse(json.stringify(json1));

16//

var json2 = object.assign({},json1);

17 json2.age = 20;

18 console.log(json1,json2);

這樣就可以複製json中的資料了。這裡記錄一下

js 物件深拷貝 關於JS深拷貝的學習

看了好多文章講js深拷貝的,但是測試了一下,還有很多地方不完善的,結合別人的 和自己的理解,自己實現了乙個深拷貝。首先要考慮拷貝的目標物件是不是 null,因為 typeof null 結果是 object,如果是null就直接返回null。然後我們再判斷各種包裝物件,因為基本資料型別的包裝物件,n...

Map拷貝 關於物件深拷貝 淺拷貝的問題

問題 map拷貝時發現資料會變化。高能預警,你看到的下面的栗子是不正確的,後面有正確的一種辦法,如果需要看的話的,請看到底,感謝各同學的提醒,已做更正,一定要看到最後 先看例子 publicclasscopymap 上面程式的期望輸出值是,mapfrist的值均為1,但是實際上輸出結果為 這裡是因為...

物件陣列的深拷貝和物件的深拷貝

1 對於 普通陣列 陣列元素為數字或者字串 深拷貝很簡單,拷貝之後兩個陣列指標指向的儲存位址不同,從而完成深拷貝 var test 1,2,3 原陣列 var testcopy concat test 拷貝陣列 testcopy 0 4 console.log test 1,2,3 console....