我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
当前回答
该解决方案适用于多种情况和跨浏览器:
Code
var getTotal = function(collection) {
var length = collection['length'];
var isArrayObject = typeof length == 'number' && length >= 0 && length <= Math.pow(2,53) - 1; // Number.MAX_SAFE_INTEGER
if(isArrayObject) {
return collection['length'];
}
i= 0;
for(var key in collection) {
if (collection.hasOwnProperty(key)) {
i++;
}
}
return i;
};
数据示例:
// case 1
var a = new Object();
a["firstname"] = "Gareth";
a["lastname"] = "Simpson";
a["age"] = 21;
//case 2
var b = [1,2,3];
// case 3
var c = {};
c[0] = 1;
c.two = 2;
用法
getLength(a); // 3
getLength(b); // 3
getLength(c); // 2
其他回答
我们可以使用以下公式来计算Object的长度:
const myObject={};console.log(Object.values(myObject).length);
更新的答案
以下是截至2016年的最新情况,以及ES5及更高版本的广泛部署。对于IE9+和所有其他支持ES5+的现代浏览器,您可以使用Object.keys(),因此上面的代码变成:
var size = Object.keys(myObj).length;
这不需要修改任何现有的原型,因为Object.keys()现在是内置的。
编辑:对象可以具有无法通过Object.key方法返回的符号财产。因此,如果不提及它们,答案将是不完整的。
将符号类型添加到语言中,以创建对象财产的唯一标识符。符号类型的主要优点是防止覆盖。
Object.keys或Object.getOwnPropertyNames不适用于符号财产。要返回它们,需要使用Object.getOwnPropertySymbols。
var人={[符号('name')]:'John Doe',[符号('age')]:33,“职业”:“程序员”};const propOwn=对象.getOwnPropertyNames(个人);console.log(propOwn.length);//1.let propSymb=对象.getOwnPropertySymbol(人);console.log(propSymb.length);//2.
较旧的答案
最可靠的答案(即,在导致最少错误的情况下,捕捉到您试图做的事情的意图)是:
Object.size=函数(obj){var大小=0,钥匙for(在obj中键入){if(obj.hasOwnProperty(key))大小++;}收益大小;};//获取对象的大小常量myObj={}var size=对象大小(myObj);
JavaScript中有一种约定,即不向Object.prototype中添加内容,因为它可以打破各种库中的枚举。不过,向Object添加方法通常是安全的。
更新:如果您使用Undercore.js(推荐使用,它是轻量级的!),那么您可以
_.size({one : 1, two : 2, three : 3});
=> 3
如果不是这样,而且无论出于何种原因,您都不想乱用Object财产,并且已经在使用jQuery,那么同样可以访问插件:
$.assocArraySize = function(obj) {
// http://stackoverflow.com/a/6700/11236
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Object.values(myObject).lengthObject.entries(myObject).length对象.keys(myObject).length
Use:
var myArray=新对象();myArray[“firstname”]=“Gareth”;myArray[“lastname”]=“Simpson”;myArray[“age”]=21;obj=对象.keys(myArray).length;控制台日志(obj)