2013-03-16 51 views
0

我從我的服務器獲取了差異對象,需要將它合併到本地表示中。 所以我需要一種方法來添加當前在原始表示中未定義的對象部分。將對象差異添加到「正確」位置

例子:

// The serverresponse 
{ 
    "PRIVATE": { 
     "SCREENS": { 
      "WORKSPACE": { 
       "POSTS": { 
        "1363391397125": { 
         "TGT": "1363390641817", 
         "ACN": "position", 
         "TO": [ 
          57.1875, 
          69.21182266009852 
         ] 
        } 
       } 
      } 
     } 
    } 
} 

// This part is similar to my local representation 
{ 
    "PRIVATE": { 
     "SCREENS": { 
      "WORKSPACE": { 
       "POSTS": {} 
      } 
     } 
} 


// So I want to insert this part of the given data at same position inside the local data 
{ 
    "1363391397125": { 
        "TGT": "1363390641817", 
        "ACN": "position", 
        "TO": [ 
          57.1875, 
          69.21182266009852 
         ] 
        } 
} 

有很多不同的部分插入所以我在尋找明確的替代遍歷每個情況下,我都會有。

+0

所以,你想合併這兩個對象,但只是把一個屬性放入原來的,如果它以前在原來沒有定義?如果該屬性已經存在於原始文件中,即使服務器響應中出現了不同的值,也應該保持原有屬性不變。 – jfriend00 2013-03-16 00:14:44

回答

3

看到你添加的jQuery的標籤,你可以使用jQuery的extend()方法,類似如下:

// The serverresponse 
var x = { 
    "PRIVATE": { 
     "SCREENS": { 
      "WORKSPACE": { 
       "POSTS": { 
        "1363391397125": { 
         "TGT": "1363390641817", 
          "ACN": "position", 
          "TO": [ 
         57.1875, 
         69.21182266009852] 
        } 
       } 
      } 
     } 
    } 
}; 

// This part is similar to my local representation 
var y = { 
    "PRIVATE": { 
     "SCREENS": { 
      "WORKSPACE": { 
       "POSTS": {} 
      } 
     } 
    } 
}; 

// merges x into y 
$.extend(y, x); 

// use $.extend(x, y); if you intended it to be the other way around. 

DEMO - 使用$.extend()合併對象。


+2

我不認爲'$ .extend()'完全符合OP的要求(儘管他們的問題並不清楚)。我已經在上面的評論中詢問了OP的問題,但我認爲他們只是想將事物放入新對象的原始對象中(如果原始對象沒有該屬性的話)。 – jfriend00 2013-03-16 00:15:27

+0

@ jfriend00:+1。如果涉及更多的檢查並且只有一些部分應該被合併,那麼'$ .extend()'將是通用的,我將不得不重新考慮我的答案。 – Nope 2013-03-16 00:16:58

+0

@FrançoisWahl THX正是我需要的。很長一段時間沒有延長工作。 – Bernhard 2013-03-16 00:17:42