Подтвердить что ты не робот

Javascript подсчитывает количество объектов в объекте

У меня есть объект что-то вроде:

Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data);

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

Я пробовал

console.log(obj.Data[0].length); // It does not work

console.log(obj.Data.length); // It does not work

Это немного сложно для меня. Надеюсь, вы, ребята, можете помочь.

4b9b3361

Ответ 1

Самый простой способ сделать это с отличной производительностью и совместимостью с старыми и новыми браузерами - включить Lo-Dash или Underscore на вашей странице.

Затем вы можете использовать либо _.size(object), либо _.keys(object).length

Для вашего obj.Data вы можете проверить это с помощью

console.log( _.size(obj.Data) );

или

console.log( _.keys(obj.Data).length );

Lo-Dash и Underscore - отличные библиотеки; вы найдете один очень полезный код. (Они довольно похожи друг на друга, Lo-Dash - это более новая версия с некоторыми преимуществами.)

В качестве альтернативы вы можете включить эту функцию в свой код, который просто прокручивает свойства объекта и подсчитывает их:

function ObjectLength( object ) {
    var length = 0;
    for( var key in object ) {
        if( object.hasOwnProperty(key) ) {
            ++length;
        }
    }
    return length;
};

Вы можете проверить это с помощью:

console.log( ObjectLength(obj.Data) );

Этот код не так быстр, как в современных браузерах. Для версии, которая намного быстрее в современных браузерах и по-прежнему работает в старых, вы можете использовать:

function ObjectLength_Modern( object ) {
    return Object.keys(object).length;
}

function ObjectLength_Legacy( object ) {
    var length = 0;
    for( var key in object ) {
        if( object.hasOwnProperty(key) ) {
            ++length;
        }
    }
    return length;
}

var ObjectLength =
    Object.keys ? ObjectLength_Modern : ObjectLength_Legacy;

и, как и прежде, проверьте его с помощью

console.log( ObjectLength(obj.Data) );

Этот код использует Object.keys(object).length в современных браузерах и возвращается к подсчету в цикле для старых браузеров.

Но если вы перейдете ко всей этой работе, я бы рекомендовал вместо этого использовать Lo-Dash или Underscore и получить все преимущества, предлагаемые этими библиотеками.

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

Благодаря Barmar для предлагая Object.keys для более новых браузеров в своем ответе.

Ответ 2

В последних браузерах вы можете использовать:

Object.keys(obj.Data).length

См. MDN

Для старых браузеров используйте цикл for-in в ответе Майкла Гири.

Ответ 3

Попробуйте Демо здесь

var list ={}; var count= Object.keys(list).length;