2010-09-05 35 views
4

我正在創建一個庫插件,我需要弄清楚一個普通的javascript對象中元素的數量。以下是我希望能夠創建圖庫的方式。如何獲取JSON對象中的鍵的數量?

$.Gallery.create($('#galContainer'), { 
    'img1.png': 'http://linktosomewhere/', 
    'img2.png': 'http://linktosomewhere/', 
    'img3.png': 'http://linktosomewhere/', 
    ........ 
}, optionsObj); 

這會將圖像放入圖庫中,點擊時會將相應的鏈接指向某個頁面。目前我正在使用一個沒有鏈接的第二個參數的數組,我正在使用images.length獲取圖像的長度。然而,使用上面的符號對我來說是理想的,我需要能夠告訴這個對象有多少個鍵。

我知道this post和其他一些人說你無法獲得對象中的元素數量。如果情況確實如此,那麼您是否有其他方式來設置此函數調用的任何建議,這將有效且易於使用?

回答

2

你不能使用對象,而不是數組?

$.Gallery.create($('#galContainer'), [ 
    {src:'img1.png', href:'http://linktosomewhere/'}, 
    {src:'img2.png', href:'http://linktosomewhere/'}, 
    {src:'img3.png', href:'http://linktosomewhere/'}, 
    ........ 
], optionsObj); 

你應該只在你的代碼中添加.src.href讀它。

你設計你的數據集作爲一個簡單的哈希不是附加的屬性非常靈活的方式(大小,類別,選擇,等...)

+0

好主意麥克風!謝謝您的幫助! – Metropolis 2010-09-05 20:26:24

7

您在鏈接到的其他問題中看到的代碼確實是唯一的方法。這裏是你如何可以創建一個函數來做到這一點:

function count(obj) { 
    var i = 0; 
    for (var x in obj) 
    if (obj.hasOwnProperty(x)) 
     i++; 
    return i; 
} 
+1

你還應該用'var'聲明'x'。當前版本使用全局'x'。 – Oleg 2010-09-05 16:15:22

+0

哎呀,謝謝你指出。 – casablanca 2010-09-05 16:26:32

+0

感謝casa,我一定會把它添加到我的函數庫中,並在以後使用它。但我認爲,對於這個特殊情況,我寧願不依賴於此。 – Metropolis 2010-09-05 20:27:42

0
Object.prototype.count = function() 
{ 
    var c = 0;var i; 
    for(i in this){if (this.hasOwnProperty(i)){c++;}}; 
    return c; 
} 

個人而言,我會建立自己的原型爲對象, 可以使用 MyObject.length但我認爲它不是通過IE完全支持。

測試顯示長度變量在對象中不可用。

測試用例:

MyObject = { 
    a : '0', 
    b : '1', 
    c : '2' 
} 
if(MyObject.count() > 5) 
{ 
    $.Gellery.Error('Images','Only 5 images allowed'); //... 
} 

http://jsfiddle.net/b9Nwv/

+1

你也應該用'var'聲明''''''c'。當前版本使用全局'i'和'c'。 – Oleg 2010-09-05 16:16:39

+0

不是一個主要的,但無論如何感謝。 – RobertPitt 2010-09-05 16:47:51

1

Underscore.js有一個方法,將告訴你如何在大對象是_.size(obj);