2013-05-04 76 views
8

我有幾個Javascript原型。最初,實例只有ID填寫,其他數據有一些通用的佔位符信息。然後,我使用ID和對象類型(使用jQuery的AJAX函數)向服務器發送消息,並且服務器返回一個包含所有缺少信息(但沒有ID)的JSON對象。返回對象中的變量與現有對象中的變量具有完全相同的名稱。將AJAX JSON對象複製到現有對象中

將此轉換爲現有空對象的最簡單方法是什麼?我想出了幾個備選方案

  • 設置爲返回的對象的對象,然後在身份證複印件(丟失原型機的功能呢?)
  • 創建一個函數爲每接受一個對象具有相同的對象結構和複製數據
  • 遍歷JSON對象的鍵值對,並將它們複製到現有的對象

如果我使用了第三個選項,這是做了正確的方法是什麼? :

for (var key in json) { 
    if (object.hasOwnProperty(key)) { 
     object[key] = json[key]; 
    } 
} 

假設json是返回的對象和object是現有的對象。

+2

如果'json'是純JSON,那麼我認爲你甚至不需要'hasOwnProperty'檢查。除非有人用'Object.prototype'進行攻擊。 – 2013-05-04 10:48:53

+0

問題是,你想用你的JSON對象做什麼。如果你想評估一個對象,JSON.parse()爲你做了訣竅。如果你想將它合併到一個現有的對象,jQuery.extend()將是一個更好的建議。 – 2013-05-04 11:15:23

+0

@PaulGrime我這樣做是爲了防止在'json'對象中有一個額外的鍵,我不想在現有的'object'中使用它。如果你會注意到,我正在通過'json'中的鍵循環,但是檢查'object'。 – Jaws212 2013-05-04 17:53:39

回答

8

試試這個使用extend()

var newObject = jQuery.extend({}, oldObject); 
+0

聽起來很完美!我根本不知道這個功能。因爲它合併了所有的屬性,我所做的任何繼承仍然會堅持,對嗎? – Jaws212 2013-05-04 17:51:19

+0

是的,你說得對。 – 2013-05-04 17:53:15

1

您可以使用jQuery.extend:http://api.jquery.com/jQuery.extend/

$.extend(object1,object2); 

如果你的JSON是一個字符串,然後從第一個創建一個對象:

var object1=$.parseJSON(myJsonString); 
+0

沒有必要使用一個Methodcall parseJSON(),因此現在每個人都可以使用JSON.parse()。 jQuery沒有做任何其他的事情:if(window.JSON && window.JSON.parse){return。window.JSON.parse(data); } – 2013-05-04 11:12:37

+0

但如果window.JSON.parse爲false,它會做得更多。 – HMR 2013-05-04 12:03:06

+0

但window.JSON.parse今天不會失敗 – vvondra 2016-01-11 19:03:14