Bry*_*arn 79 javascript object count
我有一个像这样的对象:
Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data);
Run Code Online (Sandbox Code Playgroud)
但是我无法计算对象中的对象数,最后从子对象中获取属性值.
我试过了
console.log(obj.Data[0].length); // It does not work
console.log(obj.Data.length); // It does not work
Run Code Online (Sandbox Code Playgroud)
这对我来说有点棘手.希望你们能帮忙.
Mic*_*ary 110
最简单的方法是在新旧浏览器中提供出色的性能和兼容性,在页面中包含Lo-Dash或Underscore.
然后你可以使用_.size(object)或_.keys(object).length
对于您obj.Data,您可以使用以下方法测试:
console.log( _.size(obj.Data) );
Run Code Online (Sandbox Code Playgroud)
要么:
console.log( _.keys(obj.Data).length );
Run Code Online (Sandbox Code Playgroud)
Lo-Dash和Underscore都是优秀的图书馆; 你会发现其中一个在你的代码中非常有用.(它们彼此非常相似; Lo-Dash是一个有一些优点的新版本.)
或者,您可以在代码中包含此函数,该函数只是遍历对象的属性并对它们进行计数:
function ObjectLength( object ) {
var length = 0;
for( var key in object ) {
if( object.hasOwnProperty(key) ) {
++length;
}
}
return length;
};
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法测试:
console.log( ObjectLength(obj.Data) );
Run Code Online (Sandbox Code Playgroud)
但是,该代码并不像现代浏览器那样快.对于在现代浏览器中速度更快且仍在旧版本中运行的版本,您可以使用:
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;
Run Code Online (Sandbox Code Playgroud)
和以前一样,测试它:
console.log( ObjectLength(obj.Data) );
Run Code Online (Sandbox Code Playgroud)
此代码Object.keys(object).length在现代浏览器中使用,并回退到旧浏览器的循环计数.
但是,如果您要完成所有这些工作,我建议您使用Lo-Dash或Underscore,并获得这些库提供的所有好处.
我设置了一个jsPerf来比较这些不同方法的速度.请在您方便添加到测试中的任何浏览器中运行它.
由于Barmar的建议Object.keys为新的浏览器在他的回答.
Bar*_*mar 62
在最近的浏览器中,您可以使
Object.keys(obj.Data).length
Run Code Online (Sandbox Code Playgroud)
见MDN
对于旧版浏览器,请使用for-inMichael Geary的答案中的循环.
Sud*_*han 27
var list ={}; var count= Object.keys(list).length;
Run Code Online (Sandbox Code Playgroud)