前兩天寫程序,有一個是對后台返回的json數據進行整理然后再使用,用到了關於json 的拷貝。我在我的一篇博客中提到過對數組的拷貝。分為深度拷貝,和淺拷貝。這里附上鏈接 其實對於數組的拷貝是比較簡單的,大不了就自己循環一下,然后放到一個新數組中,或者是在我博客中提到的使用 slice(0) 的辦法。
同樣的關於json數據的拷貝也有相同的簡單方法,var 新對象 = JSON.parse(JSON.stringify(老對象));這樣就復制這個老對象了。但是這樣會有一個弊端。(對於后台傳輸過來的數據是沒有問題的)。弊端就是如果這個老對象中不僅僅是簡單的數據,而是其中定義了方法的話,那么這樣的話,是不能賦值成功的。
那這樣的話,是不是就只能自己寫方法,自己寫程度復制了呢。答案是不是。因為es6已經想到了這一點,所以在es6的語法中就有一個叫做object.assign()的方法,官方對於這個方法是這樣解釋的:Object.assign()
方法用於將所有可枚舉屬性的值從一個或多個源對象復制到目標對象。它將返回目標對象。如果目標對象中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。后來的源的屬性將類似地覆蓋早先的屬性。然后咱們就可以開開心心的復制了。請看下面的代碼
1 var json1 = { 2 "name":"cheng", 3 "age":18, 4 "fun":function(a){ 5 console.log(a); 6 } 7 } 8 //json1.fun(123);
9 console.log(json1); 10 for(i in json1){ 11 if(i=="age"){ 12 json1[i] = 19; 13 } 14 } 15 var json2 = JSON.parse(JSON.stringify(json1)); 16 //var json2 = Object.assign({},json1);
17 json2.age = 20; 18 console.log(json1,json2);
這樣就可以復制json中的數據了。這里記錄一下