Я пытаюсь использовать объект JavaScript как ассоциативный массив, и все было хорошо, пока мне не понадобилось получить количество записей, которые хранятся в нем. Какой самый простой и элегантный способ сделать это? Все, о чем я могу думать, это запустить функцию for each
loop или jQuery $.each
и просто посмотреть, сколько итераций она сделает, но это выглядит как ужасная вещь.
Как получить количество полей в объекте JavaScript?
Ответ 1
Старый Firefox поддерживает свойство __count__
. Новые среды поддерживают ES5 Object.keys
. Для более старых сред мы должны отступать, чтобы просто перебирать объект и подсчитывать вручную (ugh!):
function count(obj) {
if (obj.__count__ !== undefined) { // Old FF
return obj.__count__;
}
if (Object.keys) { // ES5
return Object.keys(obj).length;
}
// Everything else:
var c = 0, p;
for (p in obj) {
if (obj.hasOwnProperty(p)) {
c += 1;
}
}
return c;
}
Ответ 2
Это сработало для меня:
Object.keys(obj).length
Ответ 3
Я считаю, что на этот вопрос ответили раньше, и/или googling может привести вас в правильном направлении. Тем не менее, позвольте мне отметить, что одна из самых больших ошибок, если вы используете цикл в форме:
for (var attr in obj) { ....
Это то, что объект может быть загроможден свойствами, которые вы не обязательно добавляли, и стандартным решением для этого, как я помню, является использование теста для hasOwnProperty, см. https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty
Ответ 4
Это сводится к этому, или учет количества, когда вы добавляете и удаляете свойства объекта.
Ответ 5
К сожалению, на самом деле нет хорошего способа узнать количество свойств в объекте без итерации по ним. Следующее довольно просто:
function countProps(obj) {
var l = 0;
for (p in obj) l++;
return l;
}
var bob = { a: 1, b: 2};
alert(countProps(bob));