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 

这对我来说有点棘手。 希望你们能帮忙。

要做到这一点,最好的方法是与旧的和新的浏览器兼容,并在页面中包含Lo-Dash或Underscore 。

然后你可以使用_.size(object)_.keys(object).length

对于你的obj.Data ,你可以testing这个:

 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; }; 

你可以用这个来testing

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

尽pipe如此,代码并不像现代浏览器中那样快。 对于在现代浏览器中更快的版本,仍然可以在旧版本中使用,您可以使用:

 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; 

和以前一样,用以下方法testing:

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

这段代码在现代浏览器中使用Object.keys(object).length ,并回退到旧浏览器的循环中。

但是如果你要完成所有这些工作,我会build议使用Lo-Dash或Underscore来获得这些库提供的所有好处。

我build立了一个jsPerf来比较这些不同方法的速度 。 请在任何可方便添加到testing中的浏览器中运行。

感谢Barmar在他的回答中为新的浏览器提供Object.keys

在最近的浏览器中,您可以使用:

 Object.keys(obj.Data).length 

请参阅MDN

对于较老的浏览器,请使用Michael Geary的答案中的for-in循环。

尝试在这里演示

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