Dav*_*ang 540
对于支持Object.keys()的浏览器,您只需执行以下操作:
Object.keys(a).length;
Run Code Online (Sandbox Code Playgroud)
否则(特别是在IE <9中),您可以使用循环自行遍历对象for (x in y):
var count = 0;
var i;
for (i in a) {
if (a.hasOwnProperty(i)) {
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
这hasOwnProperty是为了确保您只计算来自对象文字的属性,而不是它从其原型"继承"的属性.
Šim*_*das 69
这应该这样做:
Object.keys(a).length
Run Code Online (Sandbox Code Playgroud)
但是,Object.keysIE8及以下版本,Opera和FF 3.6及以下版本不支持.
现场演示: http ://jsfiddle.net/simevidas/nN84h/
小智 59
可以轻松完成$.map():
var len = $.map(a, function(n, i) { return i; }).length;
Run Code Online (Sandbox Code Playgroud)
Phi*_*ger 45
您是否看过underscore.js(http://underscorejs.org/docs/underscore.html)?它是一个包含许多有用方法的实用程序库.有一个收集size方法,以及toArray方法,它可以为您提供所需的.
_.size({one : 1, two : 2, three : 3});
=> 3
Run Code Online (Sandbox Code Playgroud)
tib*_*alt 20
总结一下,这是一个通用功能(包括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 }));
// 3Run Code Online (Sandbox Code Playgroud)
Lar*_*bar 10
在jQuery中,我以这样的方式制作它:
len = function(obj) {
var L=0;
$.each(obj, function(i, elem) {
L++;
});
return L;
}
Run Code Online (Sandbox Code Playgroud)
因此,不必查找和替换Object.keys方法,另一种方法是在脚本执行的早期使用此代码:
if(!Object.keys)
{
Object.keys = function(obj)
{
return $.map(obj, function(v, k)
{
return k;
});
};
}
Run Code Online (Sandbox Code Playgroud)
小智 6
也可以这样进行:
Object.entries(obj).length
Run Code Online (Sandbox Code Playgroud)
例如:
let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]
Run Code Online (Sandbox Code Playgroud)
这是Innuendo的答案的jQuery版本,可以使用。
$.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;
}
}
});
Run Code Online (Sandbox Code Playgroud)
可以这样称呼:
var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1;
Run Code Online (Sandbox Code Playgroud)