2015-11-11 123 views
1

我得到的數據從服務器在以下JSON格式複製/重命名JSON對象數組

{ 
"Data": [ 
    { 
     "Id": "1", 
     "Number": 0, 
     "Modify": { 
      "Id": 0, 
      "Name": "a" 
     } 
    }, 
    { 
     "Id": "2", 
     "Number": 1, 
     "Modify": { 
      "Id": 1, 
      "Name": "b" 
     } 
    } 
]} 

,我試圖,因爲我的其他數據被期待創造新副本(重命名)修改相同的對象內具有相同格式但不同名稱的JSON進行修改。

所以,我以爲我的foreach和創建相同的副本,這將形成類似下面

{ 
"Data": [ 
    { 
     "Id": "1", 
     "Number": 0, 
     "Modify": { 
      "Id": 0, 
      "Name": "a" 
     },"New": { 
      "Id": 0, 
      "Name": "a" 
     } 
    }, 
    { 
     "Id": "2", 
     "Number": 1, 
     "Modify": { 
      "Id": 1, 
      "Name": "b" 
     }, 
    "New": { 
      "Id": 1, 
      "Name": "b" 
     } 
    } 
]} 

是否有更好的方法,我可以重命名對象或者我應該創建一個副本。什麼是更好的複製方式?

感謝

回答

0

For循環是一個很好的辦法做到這一點.. data[i].Name = data[i].Modify;。我相當肯定在Javascript中沒有比這更好的方法。

0

除了@MjrKusanagi提出的建議,沒有別的辦法,但我建議另一種方法。

做一個函數,你原來的對象,並替換爲新的名稱選擇鍵,返回一個新的對象,而不改變原來的(永恆)

功能可能需要3個參數:

function modifyObject(object, oldKey, newKey) {...} 

在函數內部,你可以使用Object.assign方法來創建原始對象的副本(副本,不是引用):

var newObj = Object.assign({}, object); 

之後,你可以通過創建一個新的更改鍵名,不要忘記從新的對象中刪除舊密鑰:

newObj.newKey = newObj.oldKey; 
delete newObj.oldKey, 

最後你可以返回這個新的對象,甚至使用此功能,每次你需要做類似的事情。

使用delete被認爲是不好的做法,但至少在這裏你並沒有改變你的原始源代碼,所以你可以依賴它的內容來覆蓋你的所有應用程序的生命週期。