Javascript计算对象中的对象数

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

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


要做到这一点,最简单的方法是在页面中包含长划线或下划线,它的性能和与新老浏览器的兼容性都非常好。

然后您可以使用_.size(object)_.keys(object).length

对于您的obj.Data,您可以使用以下方法进行测试:

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) );

这段代码在现代浏览器中使用Object.keys(object).length,并返回到旧浏览器的循环计数中。

但是如果你要做所有这些工作,我建议你用长划线或下划线代替,并获得那些图书馆提供的所有好处。

我设置了一个JSPerf,比较这些不同方法的速度。请在任何方便添加到测试中的浏览器中运行它。

多亏了Barmar在他的回答中建议Object.keys使用更新的浏览器。


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

1
Object.keys(obj.Data).length

见MDN

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


Try Demo Here

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