是否有任何内置函数可以返回对象的长度?
例如,我有a = {'a':1,'b':2,'c':3},它应该返回3。如果我使用。length,它返回undefined。
它可以是一个简单的循环函数,但我想知道是否有内置函数?
还有一个相关的问题(JSON对象的长度)——在选择的答案中,用户建议将对象转换为数组,这对我的任务来说不是很舒服。
是否有任何内置函数可以返回对象的长度?
例如,我有a = {'a':1,'b':2,'c':3},它应该返回3。如果我使用。length,它返回undefined。
它可以是一个简单的循环函数,但我想知道是否有内置函数?
还有一个相关的问题(JSON对象的长度)——在选择的答案中,用户建议将对象转换为数组,这对我的任务来说不是很舒服。
当前回答
综上所述,这里有一个通用函数(包括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
其他回答
对于支持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的存在是为了确保你只计算来自对象字面量的属性,而不是它从原型“继承”的属性。
对于那些来这里查找已经是jQuery对象的项目计数的人: .length就是你想要的长度:
例子:
len = $('#divID').length;
alert(len);
你看过underscore.js (http://underscorejs.org/docs/underscore.html)吗?它是一个实用程序库,有很多有用的方法。有一个集合大小方法,以及一个toArray方法,这可能会为您提供您所需要的。
_.size({one : 1, two : 2, three : 3});
=> 3
这应该做到:
Object.keys(a).length
然而,对象。在IE8及以下版本、Opera和FF 3.6及以下版本不支持。
现场演示:http://jsfiddle.net/simevidas/nN84h/
综上所述,这里有一个通用函数(包括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