2009-07-02 89 views
11

我試圖使用JavaScript對象作爲關聯數組,一切都很好,直到我需要獲取存儲在其中的條目數。什麼是最簡單和最優雅的方式來做到這一點?我所能想到的只是運行for each循環或jQuery $.each函數,只是看它會做多少次迭代,但看起來像是一件可怕的事情。如何獲取JavaScript對象中的字段數?

回答

29

舊的Firefox支持__count__屬性。較新的環境支持ES5的Object.keys。對於年齡較大的環境中,我們要回退到剛纔遍歷對象和手動計數(啊!):

function count(obj) { 

    if (obj.__count__ !== undefined) { // Old FF 
     return obj.__count__; 
    } 

    if (Object.keys) { // ES5 
     return Object.keys(obj).length; 
    } 

    // Everything else: 

    var c = 0, p; 
    for (p in obj) { 
     if (obj.hasOwnProperty(p)) { 
      c += 1; 
     } 
    } 

    return c; 

} 
+4

哦,我的上帝,爲O(n)來獲得地圖中條目的數量...呃,這很糟糕。 :/ – fgysin 2012-11-15 09:19:32

+1

(不是說你的答案是不正確的順便說一句,只是失望的JS ...) – fgysin 2012-11-15 09:20:29

2

歸結到這一點,或者在添加和刪除對象的屬性時保持計數。

2

不幸的是,沒有一個真正的好方法來知道對象中的屬性數量而不需要迭代它們。以下是相當簡單,但:

function countProps(obj) { 
    var l = 0; 
    for (p in obj) l++; 
    return l; 
} 

var bob = { a: 1, b: 2}; 

alert(countProps(bob)); 
22

這爲我工作:

Object.keys(obj).length 
相關問題