我有一个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;
当前回答
vendor = {1: "", 2: ""}
const keysArray = Object.keys(vendor)
const objectLength = keysArray.length
console.log(objectLength)
Result 2
其他回答
更新的答案
以下是截至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添加方法通常是安全的。
以下是如何并且不要忘记检查属性是否不在原型链上:
var element_count = 0;
for(var e in myArray)
if(myArray.hasOwnProperty(e))
element_count++;
您可以简单地对任何对象使用Object.keys(obj).length来获取其长度。keys返回一个包含所有对象键(财产)的数组,使用相应数组的长度可以方便地找到该对象的长度。你甚至可以为此编写一个函数。让我们发挥创意,并为其编写一个方法(以及更方便的getter属性):
函数objLength(obj){return Object.keys(obj).length;}console.log(objLength({a:1,b:“summit”,c:“无意义”}));//工作非常好var obj=新对象();obj['fish']=30;obj['ullified content']=null;console.log(objLength(obj));//它也按照您的方式工作,即使用Object构造函数创建它Object.prototype.getLength=函数(){return Object.keys(this).length;}console.log(obj.getLength());//你也可以把它写成一个方法,这样做效率更高Object.defineProperty(Object.prototype,“length”,{get:function(){return Object.keys(this).length;}});console.log(对象长度);//可能最有效的方法是这样做的,并在上面进行了演示,它为对象设置了一个名为“length”的getter属性,该属性返回getLength(this)或this.getLength()的等效值
为了不干扰原型或其他代码,您可以构建和扩展自己的对象:
function Hash(){
var length=0;
this.add = function(key, val){
if(this[key] == undefined)
{
length++;
}
this[key]=val;
};
this.length = function(){
return length;
};
}
myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // will alert 2
如果始终使用add方法,长度属性将是正确的。如果你担心自己或其他人忘记使用它,你可以将其他人发布的属性计数器添加到长度方法中。
当然,您可以始终覆盖这些方法。但即使您这样做了,您的代码也可能会明显失败,从而易于调试
这是最跨浏览器的解决方案。
这比接受的答案更好,因为它使用本机Object.keys(如果存在)。因此,它是所有现代浏览器中速度最快的。
if (!Object.keys) {
Object.keys = function (obj) {
var arr = [],
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
arr.push(key);
}
}
return arr;
};
}
Object.keys(obj).length;