Javascript 计算对象中对象的数量

标签 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

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

最佳答案

执行此操作的最简单方法是包含 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 .请在您手边的任何浏览器中运行它以添加到测试中。

感谢Barmar对于 suggesting Object.keys for newer browsers在他的回答中。

关于Javascript 计算对象中对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16976904/

相关文章:

javascript - 为什么 knockout 绑定(bind)不会覆盖 View 模型

javascript - React 中的 Ag-grid 纯 JS 单元渲染器

javascript - 具有相同类的元素 id 的数组

javascript - 如何在其中提交表格?在 GET 方法中使用 = 代替

python - 即使数据不存在,也收集数据、计数并返回字典列表

javascript - 在这种情况下我应该使用 JavaScript 原型(prototype)吗?

javascript - 如何创建一个函数来确定两个数字之间的值

javascript - Javascript中对象的自定义属性映射

mysql - 使用 MySQL,有什么方法可以转储数据库中所有 200 个表中每个表中的记录数?

count - 按字母顺序排列的最长子串