How to get object length
是否有任何内置函数可以返回对象的长度?
例如,我有
它可以是一个简单的循环函数,但我想知道是否有一个内置函数?
有一个相关的问题(JSON对象的长度)-在选择的答案中,用户建议将对象转换为数组,这对于我的任务来说并不太合适。
对于支持object.keys()的浏览器,只需执行以下操作:
1 | Object.keys(a).length; |
否则(特别是在IE<9中),您可以使用
1 2 3 4 5 6 7 8 | var count = 0; var i; for (i in a) { if (a.hasOwnProperty(i)) { count++; } } |
应该这样做:
1 | Object.keys(a).length |
但是,IE8及以下版本、Opera及FF 3.6及以下版本不支持
现场演示:http://jsfiddle.net/simevidas/nn84h/
使用
1 | var len = $.map(a, function(n, i) { return i; }).length; |
您看过underline.js(http://underlinejs.org/docs/underline.html)吗?它是一个实用程序库,有很多有用的方法。有一个集合
1 2 | _.size({one : 1, two : 2, three : 3}); => 3 |
总而言之,这里是一个通用函数(包括IE8支持):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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中,我是这样做的:
1 2 3 4 5 6 7 | len = function(obj) { var L=0; $.each(obj, function(i, elem) { L++; }); return L; } |
因此,不必查找和替换object.keys方法,另一种方法是在脚本执行的早期使用此代码:
1 2 3 4 5 6 7 8 9 10 | if(!Object.keys) { Object.keys = function(obj) { return $.map(obj, function(v, k) { return k; }); }; } |
这是一个jquery-ised函数,可以随时使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $.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; } } }); |
可以这样称呼:
1 | var cnt = $.keyCount({"foo" :"bar"}); //cnt = 1; |
还有一个答案:
1 2 3 | var j = '[{"uid":"1","name":"Bingo Boy","profile_img":"funtimes.jpg <div class="suo-content">[collapse title=""]<ul><li>你复制了公认的答案…5年后。</li></ul>[/collapse]</div><hr><P>对于来这里查找已经是jquery对象的项计数的用户:.长度是您想要的:</P><P>例子:</P>[cc lang="javascript"]len = $('#divID').length; alert(len); |
如果您想避免新的依赖关系,您可以创建自己的智能对象。当然,只有当你想做更多的事情的时候,才能得到它的尺寸。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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(); |
也可以这样做:
1 | Object.entries(obj).length |
例如:
1 2 3 | let obj = { a: 1, b: 2, }; console.log(Object.entries(obj).length); //=> 2 // Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ] |
You might have an undefined property in the object.
If using the method of
You might want to filter them out out.
1 | Object.keys(data).filter((v) => {return data[v] !== undefined}).length |
You could add another name:value pair of length, and increment/decrement it appropriately. This way, when you need to query the length, you don't have to iterate through the entire objects properties every time, and you don't have to rely on a specific browser or library. It all depends on your goal, of course.
你可以使用像lodash lib和tolength(object)这样的东西,它应该给你对象的长度。