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;