如何获取JavaScript对象中的字段数?

时间:2009-07-02 13:33:21

标签: javascript

我正在尝试将JavaScript对象用作关联数组,一切都很顺利,直到我需要获取存储在其中的条目数。最简单,最优雅的方法是什么?我能想到的只是运行for each循环或jQuery $.each函数,看看它会做多少次迭代,但这看起来很糟糕。

5 个答案:

答案 0 :(得分:29)

旧Firefox支持__count__属性。较新的环境支持ES5的Object.keys。对于较旧的环境,我们必须回退到只是迭代对象并手动计数(呃!):

function count(obj) {

    if (obj.__count__ !== undefined) { // Old FF
        return obj.__count__;
    }

    if (Object.keys) { // ES5 
        return Object.keys(obj).length;
    }

    // Everything else:

    var c = 0, p;
    for (p in obj) {
        if (obj.hasOwnProperty(p)) {
            c += 1;
        }
    }

    return c;

}

答案 1 :(得分:26)

这对我有用:

Object.keys(obj).length

答案 2 :(得分:3)

我相信之前已经回答了这个问题,并且/或谷歌搜索可以引导您朝着正确的方向前进。不过,让我指出,如果你使用以下形式的循环,最大的问题之一是:

for (var attr in obj) { ....

对象是否会被你不一定添加的属性混乱,我记得的标准解决方案是另外使用hasOwnProperty的测试,请参阅https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty

答案 3 :(得分:2)

归结为此,或者在添加和删除对象中的属性时保持计数。

答案 4 :(得分:2)

遗憾的是,如果没有迭代它们,就不可能知道对象中的属性数量。以下是相当简单的:

function countProps(obj) {
    var l = 0;
    for (p in obj) l++;
    return l;
}

var bob = { a: 1, b: 2};

alert(countProps(bob));