如何获得对象的长度
有没有可以返回一个对象的长度的内置函数?
例如,我有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.js ( http://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();