Ответ 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
для более новых браузеров в своем ответе.