2011-09-04 77 views
1

我工作的JavaScript和我有這樣的JSON對象:將項目追加到JSON對象內的列表的最佳方法?

var obj ={"name" : "objName", 
    "dynamicList" :[]}; 

,然後我添加一些項目,我的名單如下:

obj.dynamicList["someStringID"] = {"watever"}; 

重要的是,我用一個字符串作爲索引對於我的清單上的每個項目(我不知道這可以做到最近)。

我現在唯一的問題是,每當我要求obj.dynamicList.lenght我得到0,unles我手動設置適當的數字......我想知道是否有更好的方法添加項目到我的列表?

謝謝!

+0

假設你的意思是不是obj.dynamicList.length ... obj.dynamicList.lenght –

+0

awww,總是輸入錯誤> D – frenetix

回答

1

使用下面的發現dynamicList對象的長度:

Object.keys(obj.dynamicList).length 
1

要做到這一點「正確的方式」,你將不得不使obj.dynamicList對象而不是一個數組;使用{}而不是[]來設置初始值。

+0

我只是這麼做......謝謝 – frenetix

2

在Javascript中,字符串指數是不是一個真正的索引。它實際上是數組對象的一個​​屬性。你可以使用字符串索引來設置和獲取值,但它實際上是一個具有一些屬性的空數組。不僅.length,而且.sort(),.splice()和其他數組函數都不起作用。如果需要使用數組函數,我將使用數字作爲索引,使其成爲數組中的一個真實項目。

如果您必須將該字符串用作索引,則不能依賴.length函數。如果在版本9之前不需要支持IE,那麼@ strimp099建議的Object.keys應該可以工作。或者你可能必須創建函數來計算的屬性個數例如:

function len(obj) { 
    var attrCount = 0; 
    for(var k in obj) { 
     attrCount++; 
    } 
    return attrCount; 
} 

,然後調用

len(obj.dynamicList); 
+0

感謝您的回答ntangjee。儘管這是最具信息量的答案,但我會實施strimp099的建議,因爲我不關心此項目的IE兼容性。所以我給他這點。我只是想感謝你,只要我得到我的15分,我會回到這裏,並投票回答你的答案:) – frenetix

相關問題