我有一个类似的对象:
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
这对我来说有点棘手。希望你们能帮忙。
答案 0 :(得分:98)
最简单的方法是在新旧浏览器中提供出色的性能和兼容性,在您的网页中加入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 that compares the speed of these various approaches。请在您方便添加到测试中的任何浏览器中运行它。
答案 1 :(得分:56)
答案 2 :(得分:25)
var list ={}; var count= Object.keys(list).length;