是否有任何内置函数可以返回对象的长度?
例如,我有a = { 'a':1,'b':2,'c':3 }
哪个应该返回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
在jQuery中,我采用了以下方式:
len = function(obj) {
var L=0;
$.each(obj, function(i, elem) {
L++;
});
return L;
}
因此,不必找到并替换Object.keys方法,另一种方法是在脚本执行的早期就执行以下代码:
if(!Object.keys)
{
Object.keys = function(obj)
{
return $.map(obj, function(v, k)
{
return k;
});
};
}
这是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;
}
}
});
可以这样称呼:
var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1;
还有一个答案:
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)
对于那些来这里查找已经是jQuery对象的项目的项目计数:
.length是您要寻找的内容:
例:
len = $('#divID').length;
alert(len);
也可以通过这种方式完成:
Object.entries(obj).length
例如:
let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]
如果要避免新的依赖关系,可以制作自己的智能对象。当然,只有您想做更多的事情,才可以得到它的大小。
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();
您可能在对象中具有未定义的属性。如果使用的方法,Object.keys(data).length
则这些属性也将被计算在内。
您可能要过滤掉它们。
Object.keys(data).filter((v) => {return data[v] !== undefined}).length
您可以使用类似Lodash的lib和_.toLength(object)之类的东西来给您对象的长度
您可以添加另一个name:value长度对,并适当地增加/减少它。这样,当您需要查询长度时,不必每次都遍历整个对象的属性,也不必依赖特定的浏览器或库。当然,这完全取决于您的目标。
文章标签:javascript , json , object
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!