2015-11-06 45 views
0

考慮這種情況:我有兩個複雜的jsons--一個具有完整的屬性列表,另一個理論上相同,但可能缺少一些值。我需要用第一部分的值覆蓋第一部分的值。替換類似jsons中的值

我該如何做到這一點?我試過這樣的:

function ObjectValues(data) { 
       var isArray = data instanceof Array; 
       for (var key in data) { 
        if (data.hasOwnProperty(key)) { 
         if (typeof (data[key]) == "object") { 
          if (!isArray) { 
           profileData[key] = data[key]; 
          } 
          ObjectValues(data[key]); 
         } else if (!isArray) { 
         } 
        } 
       } 
      } 
      ObjectValues(data); 

這個想法是通過部分json(數據)循環並覆蓋profileData中的相應值。這個函數可以遍歷整個結構(只要有一個對象在這個層次上啓動它本身),但我不知道如何使它覆蓋每個層次上的值,如profileData [key] = data [關鍵在不充分

編輯: 一個簡單的例子是:

Data = { 
    "activity": { 
     "online": [1,1,3,4,0,1,0,3,2], 
     } 
    }, 
    "location": "Antarctica", 
} 

profileData = { 
    "activity": { 
     "online": [], 
     } 
    }, 
    "location": "N/A", 
} 

現在,我會得到

profileData = { 
    "activity": { 
     "online": [], 
     } 
    }, 
    "online": [1,1,3,4,0,1,0,3,2], 
    "location": "Antarctica", 
} 

正常工作的第一級,但隨後顯然只是將更深的鍵添加到根目錄(就像你會遇到的那樣) CT)。問題是檢索子文件中的關鍵路徑。

+0

你現在得到的輸出是什麼,你的期望輸出是多少? –

+0

舉例說明所需的輸入和輸出。 –

回答

1

如果你可以使用jQuery,那麼你可以調用extend,而不是試圖編寫自己的方法,

$.extend(true, profileData, data);

這將partialData與那些在data發現改寫值,增加任何額外鑰匙從data以及。

+0

這將不起作用,因爲'partialData'中的值將被'data'中的值覆蓋。 partialData中的值應根據問題保留。請先使用註釋澄清。 –

+0

@CharlieH「這個想法是循環遍歷部分json(data)並且**在profileData中覆蓋**相應的值。另外,我還沒有足夠的代表評論。 – phaze0

+0

是的。這看起來像他所提供的代碼。此外,它看起來第一個參數不應該是「真」。 –