如何获得对象长度

时间:2011-04-03 23:19:54

标签: javascript json object

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

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

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

有一个相关的问题(Length of a JSON object) - 在选择的答案中,用户建议将对象转换为数组,这对我的任务来说不太舒服。

15 个答案:

答案 0 :(得分:529)

对于支持Object.keys()的浏览器,您只需执行以下操作:

Object.keys(a).length;

否则(特别是在IE< 9中),您可以使用for (x in y)循环自行遍历对象:

var count = 0;
var i;

for (i in a) {
    if (a.hasOwnProperty(i)) {
        count++;
    }
}

hasOwnProperty用于确保您只计算来自对象文字的属性,而不是它从其原型“继承”的属性。

答案 1 :(得分:66)

这应该这样做:

Object.keys(a).length

但是,IE8及以下版本,Opera及FF 3.6及以下版本不支持Object.keys

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

答案 2 :(得分:59)

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

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

答案 3 :(得分:45)

您是否看过 underscore.js http://underscorejs.org/docs/underscore.html)?它是一个包含许多有用方法的实用程序库。有一个集合size方法,以及一个toArray方法,它可以为您提供所需的。

_.size({one : 1, two : 2, three : 3});
=> 3

答案 4 :(得分:20)

总结一下,这是一个通用功能(包括ie8支持):



var objSize = function(obj) {
    var count = 0;
    
    if (typeof obj == "object") {
    
        if (Object.keys) {
            count = Object.keys(obj).length;
        } else if (window._) {
            count = _.keys(obj).length;
        } else if (window.$) {
            count = $.map(obj, function() { return 1; }).length;
        } else {
            for (var key in obj) if (obj.hasOwnProperty(key)) count++;
        }
        
    }
    
    return count;
};

document.write(objSize({ a: 1, b: 2, c: 3 }));
// 3




答案 5 :(得分:10)

在jQuery中,我以这样的方式做到了:

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

答案 6 :(得分:7)

因此,不必查找和替换Object.keys方法,另一种方法是在执行脚本的早期代码:

if(!Object.keys)
{
  Object.keys = function(obj)
  {
    return $.map(obj, function(v, k)
    {
      return k;
    });
  };
 }

答案 7 :(得分:5)

这是Innuendo的答案的jQuery-ised函数,可以随时使用。

$.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;

答案 8 :(得分:3)

还有一个答案:



var j = '[{"uid":"1","name":"Bingo Boy", "profile_img":"funtimes.jpg"},{"uid":"2","name":"Johnny Apples", "profile_img":"badtime.jpg"}]';

obj = Object.keys(j).length;
console.log(obj)




答案 9 :(得分:2)

对于那些来这里找到已经是 jQuery对象的项目数量的人:
.length正是你要找的:

示例:

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

答案 10 :(得分:1)

如果您想避免新的依赖关系,您可以制作自己的智能对象。当然,只有当你想做更多才能达到它的大小时。

MyNeatObj = function (obj) {
  var length = null;

  this.size = function () {
    if (length === null) {
      length = 0;
      for (var key in obj) length++;
    }
    return length;
  }
}

var thingy = new MyNeatObj(originalObj);
thingy.size();

答案 11 :(得分:0)

您可能在对象中有一个未定义的属性。 如果使用Object.keys(data).length的方法,则还会计算这些属性。

您可能希望将其过滤掉。

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

答案 12 :(得分:0)

也可以通过以下方式完成:

Object.entries(obj).length

例如:

let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]

答案 13 :(得分:-1)

您可以添加另一个名称:长度值对,并适当增加/减少它。这样,当您需要查询长度时,您不必每次都遍历整个对象属性,并且您不必依赖特定的浏览器或库。当然,这完全取决于你的目标。

答案 14 :(得分:-2)

您可以使用类似Lodash lib和_.toLength(对象)之类的内容来为您提供对象的长度