我正在创建一个库插件,我需要在其中找出普通javascript对象中的元素数量。以下是我希望能够创建图库的方法。
$.Gallery.create($('#galContainer'), {
'img1.png': 'http://linktosomewhere/',
'img2.png': 'http://linktosomewhere/',
'img3.png': 'http://linktosomewhere/',
........
}, optionsObj);
这会将图像放入图库,并在点击时显示相应链接。目前我在没有链接的情况下使用第二个参数的数组,我使用images.length获取图像的长度。但是使用上面的符号对我来说是理想的,我需要能够告诉这个对象有多少个键。
我知道this post和其他一些人说你无法获得对象中的元素数量。如果情况确实如此,您是否对设置此函数调用的其他方式有任何建议,这将是高效且易于使用的?
答案 0 :(得分:7)
您在链接的其他问题中看到的代码实际上是唯一的方法。以下是创建函数的方法:
function count(obj) {
var i = 0;
for (var x in obj)
if (obj.hasOwnProperty(x))
i++;
return i;
}
答案 1 :(得分: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
即可阅读。
您将数据集设计为简单哈希的方式对于其他属性(大小,类别,选定等等)的灵活性不是很高。
答案 2 :(得分:1)
Underscore.js有一个方法可以告诉你对象有多大_.size(obj);
答案 3 :(得分:0)
Object.prototype.count = function()
{
var c = 0;var i;
for(i in this){if (this.hasOwnProperty(i)){c++;}};
return c;
}
就我个人而言,我会为Object构建你自己的原型,你可以使用 MyObject.length
,但我认为IE并不完全支持它。
测试显示对象中的长度变量不可用。
测试用例:
MyObject = {
a : '0',
b : '1',
c : '2'
}
if(MyObject.count() > 5)
{
$.Gellery.Error('Images','Only 5 images allowed'); //...
}