2012-04-24 77 views
0

我有一個小函數,它將返回的結果添加到對象列表中,但是我遇到的問題是,如果存在某個重複,它將不會允許它 - 但有一些方面發生重複,而其他這不方面...將結果添加到對象

我會解釋有更好的例子:

var data = {"24":{"16":["172"],"15":["160"]}} 

此數據錶轉換爲:

var data = {"X":{"Y":["id"],"Y":["id"]}}; 

現在即時通訊試圖插入NE這樣的W數據:

for(var key in result){    
     if(result.hasOwnProperty(key)){ 
     data[key] = result[key];  
     } 
    } 

如果你考慮網格座標,在我的對象列表,Y不能在相同的X複製和X完全無法被複制。

這是「結果」,即時通訊試圖插入的示例數據:

{24: {13:[187]}} 

因此轉向VAR數據:

var data = {"24":{"16":["172"],"15":["160"],"13":["187"]}}; 

是否有任何人知道我可以實現的重複檢查我的循環?

+0

難道你不能在試圖添加它之前測試'if(key in data)'或'if(data.hasOwnProperty(key))'嗎? – RobG 2012-04-24 03:51:52

+0

,但是如果密鑰變成數據,它將如何添加剩餘的數據..例如..如果已經找到X,它仍然需要將Y [id]添加到已存在的X中 – Sir 2012-04-24 16:48:23

+0

我不知道在你想複製數據的情況下,當你不想複製數據時,我認爲'in'可能會幫助你決定怎麼做。 – RobG 2012-04-25 04:20:40

回答

1
// Declare this temporary object we'll use later 
var obj = {} 

for (var key in result){    
    if (result.hasOwnProperty(key)) { 
     // If the key already exists 
     if (data[ key ] === result[ key ]) { 

      // Empty the temporary object 
      obj = {} 
      // Loop through the subkeys 
      for (var subkey in result[ key ]) {    
       if (result[ key ].hasOwnProperty([ subkey ])) { 

        // Fill in the temporary object 
        obj[ subkey ] = result[ key ][ subkey ] 
       } 
      } 

      // Add the new object to the original object 
      data[ key ] = obj 
     } 

     // If the key doesn't exist, do it normally 
     else { 
      data[ key ] = result[ key ] 
     } 
    } 
} 

// Now, to be tedious, let's free up the memory of the temporary object! 
obj = null 

像這樣的東西應該工作。如果發生衝突,我重建內聯對象,以便我可以將它添加回所有原始鍵和新鍵/值。

PS:最後一行只是爲了好玩。

+0

謝謝你剛剛回答了一個問題,我即將要問的問題是釋放內存:P! Spooky:P 我會試試這個腳本!謝謝 ! – Sir 2012-04-24 20:43:49