前兩天寫程式,有一個是對後臺返回的json數據進行整理然後再使用,用到了關於json 的拷貝。我在我的一篇博客中提到過對數組的拷貝。分為深度拷貝,和淺拷貝。這裡附上鏈接 其實對於數組的拷貝是比較簡單的,大不了就自己迴圈一下,然後放到一個新數組中,或者是在我博客中提到的使用 slice(0) 的辦法。 ...
前兩天寫程式,有一個是對後臺返回的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中的數據了。這裡記錄一下