Предположим, что у меня есть следующий объект в JavaScript:
var object = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}; 
Как узнать, сколько значений существует в объекте?
Предположим, что у меня есть следующий объект в JavaScript:
var object = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}; 
Как узнать, сколько значений существует в объекте?
Нет простого ответа, потому что Object — который каждый объект в JavaScript происходит из — включает в себя множество атрибутов автоматически, и точный набор атрибутов, которые вы получаете, зависит от конкретного интерпретатора и того, что выполнил код перед вашим. Итак, вы каким-то образом должны отделять те, которые вы определили, от тех, которые у вас есть "бесплатно".
Здесь один из способов:
var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
Object.prototype.foobie = 'bletch'; // add property to foo that won't be counted
var count = 0;
for (var k in foo) {
    if (foo.hasOwnProperty(k)) {
       ++count;
    }
}
alert("Found " + count + " properties specific to foo");
Вторая строка показывает, как другой код может добавлять свойства ко всем производным Object. Если вы удалите проверку hasOwnProperty() внутри цикла, счетчик свойств пойдет не менее 4. На странице с другим JavaScript, кроме этого кода, он может быть выше 4, если этот другой код также изменяет Object прототип.
Вы можете сделать это, используя этот простой код:
Object.keys(myObject).length
Используйте underscore библиотеку, очень полезную: _.keys(obj).length.
Вы можете выполнить итерацию по объекту, чтобы получить ключи или значения:
function numKeys(obj)
{
    var count = 0;
    for(var prop in obj)
    {
        count++;
    }
    return count;
}Это похоже на "орфографическую ошибку", но просто хочу указать, что ваш пример является недопустимым синтаксисом, должен быть
var object = {"key1":"value1","key2":"value2","key3":"value3"};
 var miobj = [
  {"padreid":"0", "sw":"0", "dtip":"UNO", "datos":[]},
  {"padreid":"1", "sw":"0", "dtip":"DOS", "datos":[]}
 ];
 alert(miobj.length) //=== 2
, но
 alert(miobj[0].length) //=== undefined
эта функция очень хороша
Object.prototype.count = function () {
    var count = 0;
    for(var prop in this) {
        if(this.hasOwnProperty(prop))
            count = count + 1;
    }
    return count;
}
alert(miobj.count()) // === 2
alert(miobj[0].count()) // === 4
Эта функция использует свойство Mozilla __count__, если она доступна, поскольку она быстрее, чем итерация по каждому свойству.
function countProperties(obj) {
  var count = "__count__",
  hasOwnProp = Object.prototype.hasOwnProperty;
  if (typeof obj[count] === "number" && !hasOwnProp.call(obj, count)) {
    return obj[count];
  }
  count = 0;
  for (var prop in obj) {
    if (hasOwnProp.call(obj, prop)) {
      count++;
    }
  }
  return count;
};
countProperties({
  "1": 2,
  "3": 4,
  "5": 6
}) === 3;
EDIT: это приведет к ошибкам с jquery, а также к некоторым другим неудобствам. ВЫ НЕ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ ЭТО: (возможно, если бы вместо функции публичного свойства можно было добавить приватный метод, это было бы нормально, но сейчас у вас нет времени). Сообщество wikied
не использовать:
Несмотря на то, что объект javascript по умолчанию не имеет функции count, классы легко расширяемы, и можно добавить его сами:
Object.prototype.count = function () {
    var count = 0;
    for(var prop in this) {
        if(this.hasOwnProperty(prop))
            count = count + 1;
    }
    return count;
}
Итак, после этого можно выполнить
var object = {'key1': 'val1', 'key2':'val2', 'key3':'val3'};
console.log(object.count()); // 3
Как вывод, если вы хотите использовать функцию подсчета в объектах, вам нужно скопировать код из блока кода 1 и вставить его в начале времени выполнения (до того, как вы вызовете счет).
Сообщите мне, если это сработает для вас!
С уважением, Педро
Для тех, кто прочитает этот вопрос/ответы, вот реализация JavaScript в коллекции словарей очень похожа на функциональность .NET: JavaScript Dictionary
Хотя это не будет "истинным объектом", вы всегда можете сделать что-то вроде этого:
var foo = [
  {Key1: "key1"},
  {Key2: "key2"},
  {Key3: "key3"}
];
alert(foo.length); // === 3