如何获得对象的长度

有没有可以返回一个对象的长度的内置函数?

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

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

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

对于支持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用于确保您只计算对象字面上的属性,而不是从其原型“inheritance”的属性。

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

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

这应该做到这一点:

 Object.keys(a).length 

但是,IE8及以下版本,Opera和FF3.6及以下版本不支持Object.keys

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

你有没有看过underscore.jshttp://underscorejs.org/docs/underscore.html )? 这是一个有很多有用的方法的实用程序库。 有一个收集size方法,以及一个toArray方法,它可能会得到你所需要的。

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

总结在一起,这里是一个通用的function(包括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 

在jQuery中,我是这样做的:

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

因此,不需要find并replaceObject.keys方法,另一种方法是在脚本执行的早期就执行这个代码:

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

以下是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; 

还有一个答案:

 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) 

对于那些来这里find已经是jQuery对象的东西的项目数:
.length是你在找什么:

例:

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

对象中的键可以使用Object进行计数

 Object.keys(obj).length 

它将返回对象中键的长度。 如果返回0意味着对象是空的。

如果你想避免新的依赖关系,你可以创build自己的智能对象。 当然,只有当你想做更多的事情时,才能得到它的大小。

 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(); 

你可以使用像Lodash lib和_.toLength(对象)应该给你的对象的长度

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

对象中可能有一个未定义的属性。 如果使用Object.keys(data).length的方法,那么这些属性也将被计数。

你可能想过滤出来。

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

例:

 var a = { 'a':1,'b':2,'c':3 }; jQuery(a).size();