如何获取对象长度

是否有任何内置函数可以返回对象的长度?

例如,我有a = { 'a':1,'b':2,'c':3 },它应该返回3。如果我使用a.length,它返回undefined

它可以是一个简单的循环函数,但我想知道是否有内置函数?

有一个相关的问题(JSON对象的长度) -在选择的答案中,用户建议将对象转换为数组,这对我的任务来说不是很舒服。

608923 次浏览

对于支持种()的浏览器,你可以简单地这样做:

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中,我已经这样做了:

len = function(obj) {
var L=0;
$.each(obj, function(i, elem) {
L++;
});
return L;
}

你看过underscore.js (http://underscorejs.org/docs/underscore.html)了吗?它是一个实用程序库,有很多有用的方法。有一个集合size方法,以及一个toArray方法,这可能会得到你需要的东西。

_.size({one : 1, two : 2, three : 3});
=> 3

这应该做到:

Object.keys(a).length

然而,在IE8及以下版本、Opera和FF 3.6及以下版本中不支持Object.keys

现场演示: http://jsfiddle.net/simevidas/nN84h/

下面是一个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;
}
}
});

可以这样调用:

var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1;

可以用$.map()轻松完成:

var len = $.map(a, function(n, i) { return i; }).length;

所以我们不需要去寻找和替换对象。方法,另一种方法是在脚本执行的早期执行以下代码:

if(!Object.keys)
{
Object.keys = function(obj)
{
return $.map(obj, function(v, k)
{
return k;
});
};
}

如果你想避免新的依赖,你可以创建自己的智能对象。当然,只有当你想做更多的事情时,才会得到它的大小。

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();

综上所述,这里有一个通用函数(包括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对象的东西的项目计数的人:
.length就是你要找的:

例子:

len = $('#divID').length;
alert(len);

你可以使用类似Lodash lib的东西,而_.toLength(object)应该会给你对象的长度

还有一个答案:

.
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)

您可以添加另一个名称:length值对,并适当地递增/递减它。这样,当需要查询长度时,就不必每次都遍历整个对象属性,也不必依赖于特定的浏览器或库。当然,这完全取决于你的目标。

对象中可能有一个未定义的属性。 如果使用Object.keys(data).length方法,这些属性也将被计数。< / p >

你最好把它们过滤掉。

Object.keys(data).filter((v) => {return data[v] !== undefined}).length

也可以这样做:

Object.entries(obj).length

例如:

let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]