Javascript计算对象中的对象数

时间:2013-06-07 05:35:36

标签: javascript object count

我有一个类似的对象:

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

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

3 个答案:

答案 0 :(得分:98)

最简单的方法是在新旧浏览器中提供出色的性能和兼容性,在您的网页中加入Lo-DashUnderscore

然后您可以使用_.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。请在您方便添加到测试中的任何浏览器中运行它。

感谢Barmar代表suggesting Object.keys for newer browsers回答。

答案 1 :(得分:56)

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

Object.keys(obj.Data).length

请参阅MDN

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

答案 2 :(得分:25)

  

尝试Demo Here

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