是否有任何内置函数可以返回对象的长度?

例如,我有a = {'a':1,'b':2,'c':3},它应该返回3。如果我使用。length,它返回undefined。

它可以是一个简单的循环函数,但我想知道是否有内置函数?

还有一个相关的问题(JSON对象的长度)——在选择的答案中,用户建议将对象转换为数组,这对我的任务来说不是很舒服。


当前回答

可以用$.map()轻松完成:

var len = $.map(a, function(n, i) { return i; }).length;

其他回答

这应该做到:

Object.keys(a).length

然而,对象。在IE8及以下版本、Opera和FF 3.6及以下版本不支持。

现场演示:http://jsfiddle.net/simevidas/nN84h/

下面是一个jquery化的函数,可以使用了。

$.extend({
    keyCount : function(o) {
        if(typeof o == "object") {
            var i, count = 0;
            for(i in o) {
                if(o.hasOwnProperty(i)) {
                    count++;
                }
            }
            return count;
        } else {
            return false;
        }
    }
});

可以这样调用:

var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1;

对于那些来这里查找已经是jQuery对象的项目计数的人: .length就是你想要的长度:

例子:

len = $('#divID').length;
alert(len);

在jQuery中,我已经这样做了:

len = function(obj) {
    var L=0;
    $.each(obj, function(i, elem) {
        L++;
    });
    return L;
}

你可能在对象中有一个未定义的属性。 如果使用Object.keys(data)方法。长度被使用,这些属性也将被计算。

你最好把它们过滤掉。

Object.keys(data).filter((v) => {return data[v] !== undefined}).length