2010-09-05 36 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);