Javascript计算对象中的对象数

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-DashUnderscore.

然后你可以使用_.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)

  • 你宁愿应该提出其他答案,而不是重新发布解决方案:-) (5认同)
  • 当我开始制作演示时,没有人给出这个答案. (4认同)