如何获取JSON对象中键的数量?

4

我正在创建一个相册插件,其中需要找出普通JavaScript对象中元素的数量。下面是我想要创建相册的方式。

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

这将把图片放入图库,并在单击时与相应链接关联。目前,我使用一个没有链接的数组作为第二个参数,并使用images.length获取图像长度。然而,使用上面的表示法对我来说是理想的,我需要能够告诉这个对象有多少个键。
我知道这篇文章和其他几篇文章(点击查看)说无法获取对象中元素的数量。如果确实如此,您是否有任何建议,可以以高效且易于使用的方式设置此函数调用?
4个回答

7
你在链接的其他问题中看到的代码确实是完成此操作的唯一方法。下面是如何创建一个函数来完成它:
function count(obj) {
  var i = 0;
  for (var x in obj)
    if (obj.hasOwnProperty(x))
      i++;
  return i;
}

1
你还应该使用 var 声明 x。当前版本使用全局的 x - Oleg
谢谢 Casa,我一定会把这个函数加入到我的工具库中,以后会用到它。但是对于这个特定的情况,我认为我不想依赖它。 - Metropolis

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即可读取它。

将数据集设计为简单的哈希表并不太灵活,无法处理额外的属性(大小、类别、选择等)。


1

Underscore.js有一个方法可以告诉你对象的大小:_.size(obj);


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'); //...
}

http://jsfiddle.net/b9Nwv/


1
你应该使用var声明变量ic。当前版本使用全局变量ic - Oleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接