是否有任何可以返回对象长度的内置函数?
例如,我有a = { 'a':1,'b':2,'c':3 }
which 应该返回3
. 如果我使用a.length
它返回undefined
.
它可能是一个简单的循环函数,但我想知道是否有内置函数?
有一个相关的问题(JSON 对象的长度) - 在所选的答案中,用户建议将对象转换为数组,这对我的任务来说不太合适。
是否有任何可以返回对象长度的内置函数?
例如,我有a = { 'a':1,'b':2,'c':3 }
which 应该返回3
. 如果我使用a.length
它返回undefined
.
它可能是一个简单的循环函数,但我想知道是否有内置函数?
有一个相关的问题(JSON 对象的长度) - 在所选的答案中,用户建议将对象转换为数组,这对我的任务来说不太合适。
对于支持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
是为了确保您只计算对象文字中的属性,而不是它从其原型“继承”的属性。
这应该这样做:
Object.keys(a).length
但是,Object.keys
在 IE8 及以下、Opera 和 FF 3.6 及以下不支持。
现场演示: http : //jsfiddle.net/simevidas/nN84h/
可以通过以下方式轻松完成$.map()
:
var len = $.map(a, function(n, i) { return i; }).length;
你看过underscore.js ( http://underscorejs.org/docs/underscore.html ) 吗?它是一个实用程序库,有很多有用的方法。有一个集合size
方法,以及一个 toArray 方法,它可以满足您的需求。
_.size({one : 1, two : 2, three : 3});
=> 3
综上所述,这是一个通用功能(包括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