Javascript counting number of objects in object
本问题已经有最佳答案,请猛点这里访问。
我有一个物体,比如:
1 | Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data); |
但是我无法计算对象中的对象数量,最后从子对象中获取属性值。
我试过了
1 2 3 | console.log(obj.Data[0].length); // It does not work console.log(obj.Data.length); // It does not work |
号
这对我来说有点棘手。希望你们能帮忙。
型
要做到这一点,最简单的方法是在页面中包含长划线或下划线,它的性能和与新老浏览器的兼容性都非常好。
然后您可以使用
对于您的
1 | console.log( _.size(obj.Data) ); |
或者:
1 | console.log( _.keys(obj.Data).length ); |
号
lo-dash和下划线都是很好的库;您会发现其中一个在代码中非常有用。(它们非常相似;Lo Dash是一个更新版本,有一些改进。)
或者,您可以在代码中包含此函数,它简单地循环访问对象的属性并对其进行计数:
1 2 3 4 5 6 7 8 9 | function ObjectLength( object ) { var length = 0; for( var key in object ) { if( object.hasOwnProperty(key) ) { ++length; } } return length; }; |
您可以使用以下方法测试:
1 | console.log( ObjectLength(obj.Data) ); |
。
不过,这段代码并没有现代浏览器中的速度快。对于在现代浏览器中速度快得多但仍在旧浏览器中工作的版本,可以使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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; |
和以前一样,用以下方法进行测试:
1 | console.log( ObjectLength(obj.Data) ); |
。
这段代码在现代浏览器中使用
但是如果你要做所有这些工作,我建议你用长划线或下划线代替,并获得那些图书馆提供的所有好处。
我设置了一个JSPerf,比较这些不同方法的速度。请在任何方便添加到测试中的浏览器中运行它。
多亏了Barmar在他的回答中建议
型
在最近的浏览器中,您可以使用:
1 | Object.keys(obj.Data).length |
。
见MDN
对于较老的浏览器,使用Michael Geary的答案中的
型
Try Demo Here
号
1 | var list ={}; var count= Object.keys(list).length; |