Как вы получаете количество ключей в объекте JSON? - PullRequest
4 голосов
/ 05 сентября 2010

Я создаю плагин галереи, в котором мне нужно выяснить количество элементов в простом объекте javascript.Ниже показано, как я хотел бы иметь возможность создавать галерею.

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

При этом изображения будут вставлены в галерею с соответствующими ссылками на некоторые страницы при нажатии.В настоящее время я использую массив для этого второго параметра без ссылок, и я получаю длину изображений, используя images.length.Однако использование обозначений выше было бы для меня идеальным, и мне нужно было бы сказать, сколько ключей есть в этом объекте.

Мне известно о этом посте и нескольких других, говорящихВы не можете получить количество элементов в объекте.Если это действительно так, есть ли у вас какие-либо предложения по другому способу установки этого вызова функции, который будет эффективным и простым в использовании?

Ответы [ 4 ]

7 голосов
/ 05 сентября 2010

Код, который вы видите в другом вопросе, на который вы ссылаетесь, действительно единственный способ сделать это.Вот как вы можете создать функцию для этого:

function count(obj) {
  var i = 0;
  for (var x in obj)
    if (obj.hasOwnProperty(x))
      i++;
  return i;
}
2 голосов
/ 05 сентября 2010

Разве вы не можете использовать вместо этого массив объектов?

$.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 голос
/ 21 сентября 2012

Underscore.js имеет метод, который сообщит вам, насколько велик объект _.size(obj);

0 голосов
/ 05 сентября 2010
Object.prototype.count = function()
{
   var c = 0;var i;
   for(i in this){if (this.hasOwnProperty(i)){c++;}};
   return c;
}

Лично я бы создал свой собственный прототип для Object, , вы можете использовать MyObject.length, но я думаю, что он не полностью поддерживается IE.

проверка показывает, что переменная длины недоступна в объектах.

TestCase:

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

http://jsfiddle.net/b9Nwv/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...