2010-07-13 54 views
0

我正在使用數組作爲關鍵數據庫中對象的ID號的對象的關聯數組。安靜的自然 - ID是大數字 - 所以這意味着通常有長度爲10^4的數組,只有20個元素作爲有效的實際對象。javascript中的關聯數組到JSON

我想發送這個數據回服務器,但無論我不得不將js對象轉換爲JSON,我試過所有的&他們都產生一個長度爲10^4的JSON字符串。如此多的數據無法發回。

我需要一種將關聯數組轉換爲JSON的方式來丟棄未定義的條目。
有什麼建議嗎?

編輯:什麼我的陣列看起來像 例: VAR myAssociativeArray = [未定義的,不確定的,不確定的...,someobject,一些其他的對象......,不確定的,...又... ..]

+0

....您是否使用'數組'作爲關聯數組? – kennytm 2010-07-13 08:13:39

+0

如何添加前綴: var myAssociativeArray = {a123812039:「Something」,a123656456:「something else」} – mplungjan 2010-07-13 08:16:11

回答

1

這聽起來像你有一個常規的數組,但你使用它,就好像它稀疏(它可能會或可能不會在內部)。以下是如何使用替代功能,將轉換爲對象:

JSON.stringify(root, function(k,v) 
{ 
    if(v instanceof Array) 
    { 
    var o = {}; 
    for(var ind in v) 
    { 
     if(v.hasOwnProperty(ind)) 
     { 
     o[ind] = v[ind]; 
     } 
    } 
    return o; 
    } 
    return v; 
}); 
0

讀你的問題,它看起來正在使用一個數組。這裏有一個解決方案只獲取數組中定義的條目(不保證順序)。

請注意,因爲它是一個稀疏數組,並且可以高達10000個實例,所以最好只枚舉這些屬性,而不是實際從0循環到9999,因爲它們中的大多數將不確定。所以這對性能更好。

var definedEntries = {}; 

for(var prop in dataObject) { 
    if(dataObject.hasOwnProperty(prop)) { 
     definedEntries[prop] = dataObject[prop]; 
    } 
} 

然後發送definedEntries到服務器。