Javascript 如何获取对象长度
是否有任何内置函数可以返回对象的长度 例如,我有Javascript 如何获取对象长度,javascript,json,object,Javascript,Json,Object,是否有任何内置函数可以返回对象的长度 例如,我有a={'a':1,'b':2,'c':3},它应该返回3。如果我使用a.length它将返回undefined 它可以是一个简单的循环函数,但我想知道是否有内置函数 有一个相关的问题()-在选择的答案中,用户建议将对象转换为数组,这对于我的任务来说不是很舒服。对于支持的浏览器,您可以简单地执行以下操作: Object.keys(a).length; 否则(特别是在IE
a={'a':1,'b':2,'c':3}
,它应该返回3
。如果我使用a.length
它将返回undefined
它可以是一个简单的循环函数,但我想知道是否有内置函数
有一个相关的问题()-在选择的答案中,用户建议将对象转换为数组,这对于我的任务来说不是很舒服。对于支持的浏览器,您可以简单地执行以下操作:
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;
}
你看过下划线.js()了吗?这是一个实用程序库,有很多有用的方法。有一个collection
size
方法,还有一个toArray方法,可以满足您的需要
_.size({one : 1, two : 2, three : 3});
=> 3
这应该做到:
Object.keys(a).length
但是,IE8及以下版本、Opera及FF 3.6及以下版本不支持对象.key
现场演示:这里有一个jQuery-ised影射回答功能,可供使用
$.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;
可通过以下方式轻松完成:
因此,不必查找并替换Object.keys方法,另一种方法是在脚本执行的早期编写以下代码:
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=函数(obj){
var计数=0;
if(对象类型==“对象”){
if(Object.keys){
count=Object.keys(obj).length;
}否则,如果(窗口){
计数=uj.keys(obj.length);
}else if(窗口$){
count=$.map(obj,function(){return 1;}).length;
}否则{
for(obj中的var键)if(obj.hasOwnProperty(键))count++;
}
}
返回计数;
};
编写(objSize({a:1,b:2,c:3}));
//3
对于那些来到这里查找已经是jQuery对象的项目计数的人:.长度是您需要的: 例如:
len = $('#divID').length;
alert(len);
您可以使用lib和uz之类的工具。toLength(对象)应该会给您对象的长度再回答一个问题:
var j='[{“uid”:“1”,“name”:“Bingo Boy”,“profile_img”:“funtimes.jpg”},{“uid”:“2”,“name”:“Johnny Apples”,“profile_img”:“badtime.jpg”}];
obj=对象。键(j)。长度;
log(obj)
您可以添加另一个名称:长度的值对,并适当地增加/减少它。这样,当需要查询长度时,不必每次都遍历整个对象属性,也不必依赖特定的浏览器或库。当然,这取决于您的目标。对象中可能有未定义的属性。
如果使用Object.keys(data).length的方法,这些属性也将被计算在内
你可能想把它们过滤掉
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 ] ]
为什么对你来说不舒服?在这个主题中,建议进行转换,并且每个元素都是手动编写的-这就是为什么2 Billy Moon,可能是因为我没有找到那个主题,因为我用“object”这个词搜索,但是有“Associateve array”。对不起,这应该更规范一些:但有些答案是垃圾。哦,嗯……是的,我也考虑过这个决定,但是我们应该编写自己的keys()函数(我的意思是crossbrowser函数)@inneudo是的,但这是你无论如何都想做的事情。IE8还将持续几年(至少到2016年),而实现JavaScript功能(针对不支持它们的浏览器)是一项琐碎而安全的任务,因此没有理由不这么做。你不会仅仅因为IE8就想在未来5年内避免使用新的ES5功能-那是毫无意义的:)
是的,我明白了。我们必须忍受到2016年(我是开玩笑的:)
)如果有人想知道,这是第一个包含Object.keys
-@DavidTang的答案,仅仅几年后就包含了这个答案。谢谢,我会看看这个库。但实际上,我不想使用很多库(我已经使用了jQuery库)@inuendo如果您没有注意到,下划线.js包含我在回答中提到的keys
函数。如果使用underline.js,您可以使用键
功能-在这种情况下,现代浏览器将使用内置的键
功能,IE8(以及其他没有内置键
功能的浏览器)将使用underline.js.Ok定义的自定义功能。我不喜欢使用很多.js文件(可能有点凌乱),因此我想将jquery.js和下划线.js合并到文件“\u jquery.js”中,并将这些库一起使用=)
@inneudo\u jquery.js
-我喜欢这个名称:)
。但是,我建议使用。至于下划线,它还没有出现在谷歌的CDN上,但有。就目前而言,我发现下划线-它托管在亚马逊服务器上,因此应该快速可靠。@inuendo,因为相当多的网站使用Google的CDN for jQuery。这意味着当用户请求您的网站时,jQuery文件可能已经缓存在浏览器中。在这种情况下,浏览器根本不需要请求jQeury文件——它使用缓存的文件。如果您想要最新的1.5 jQuery文件,只需从URL中删除.2
,它也会起作用。这仅适用于
let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]