如何获得JSON对象中的键数?

时间:2010-09-05 14:52:42

标签: javascript jquery json

我正在创建一个库插件,我需要在其中找出普通javascript对象中的元素数量。以下是我希望能够创建图库的方法。

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

这会将图像放入图库,并在点击时显示相应链接。目前我在没有链接的情况下使用第二个参数的数组,我使用images.length获取图像的长度。但是使用上面的符号对我来说是理想的,我需要能够告诉这个对象有多少个键。

我知道this post和其他一些人说你无法获得对象中的元素数量。如果情况确实如此,您是否对设置此函数调用的其他方式有任何建议,这将是高效且易于使用的?

4 个答案:

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

http://jsfiddle.net/b9Nwv/