我有一个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;
当前回答
您可以始终执行Object.getOwnPropertyNames(myObject).length,以获得与[].length为普通数组提供的结果相同的结果。
其他回答
为了不干扰原型或其他代码,您可以构建和扩展自己的对象:
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方法,长度属性将是正确的。如果你担心自己或其他人忘记使用它,你可以将其他人发布的属性计数器添加到长度方法中。
当然,您可以始终覆盖这些方法。但即使您这样做了,您的代码也可能会明显失败,从而易于调试
上述部分的变化如下:
var objLength = function(obj){
var key,len=0;
for(key in obj){
len += Number( obj.hasOwnProperty(key) );
}
return len;
};
这是一种更优雅的方式来集成hasOwnProp。
这里有一个完全不同的解决方案,只适用于更现代的浏览器(Internet Explorer 9+、Chrome、Firefox 4+、Opera 11.60+和Safari 5.1+)
看看这个jsFiddle。
设置关联数组类
/**
* @constructor
*/
AssociativeArray = function () {};
// Make the length property work
Object.defineProperty(AssociativeArray.prototype, "length", {
get: function () {
var count = 0;
for (var key in this) {
if (this.hasOwnProperty(key))
count++;
}
return count;
}
});
现在您可以按如下方式使用此代码。。。
var a1 = new AssociativeArray();
a1["prop1"] = "test";
a1["prop2"] = 1234;
a1["prop3"] = "something else";
alert("Length of array is " + a1.length);
使用Object.keys(myObject).length获取对象/数组的长度
var myObject=新对象();myObject[“firstname”]=“Gareth”;myObject[“lastname”]=“Simpson”;myObject[“age”]=21;console.log(Object.keys(myObject).length)//3.
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Object.values(myObject).lengthObject.entries(myObject).length对象.keys(myObject).length