我有一个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.keys(myObject).length
其他回答
@palmsey:公平地说,JavaScript文档实际上明确提到以这种方式使用Object类型的变量作为“关联数组”。
公平地说,帕姆西说得很对。它们不是关联数组;它们绝对是对象:)-执行关联数组的任务。但就更广泛的观点而言,根据我发现的这篇相当不错的文章,你似乎有权这样做:
JavaScript“关联数组”被认为有害
但根据所有这些,公认的答案本身就是糟糕的做法?
为Object指定prototype size()函数
如果在Object.prototype中添加了任何其他内容,那么建议的代码将失败:
<script type="text/javascript">
Object.prototype.size = function () {
var len = this.length ? --this.length : -1;
for (var k in this)
len++;
return len;
}
Object.prototype.size2 = function () {
var len = this.length ? --this.length : -1;
for (var k in this)
len++;
return len;
}
var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
alert("age is " + myArray["age"]);
alert("length is " + myArray.size());
</script>
我认为这个答案不应该被接受,因为如果您有任何其他代码在同一执行上下文中运行,那么它就不能被信任。为了以稳健的方式实现这一点,当然需要在myArray中定义size方法,并在遍历成员时检查成员的类型。
实现这一点的一个好方法(仅限Internet Explorer 9+)是在长度属性上定义一个神奇的getter:
Object.defineProperty(Object.prototype, "length", {
get: function () {
return Object.keys(this).length;
}
});
你可以这样使用它:
var myObj = { 'key': 'value' };
myObj.length;
它会给出1。
简单的内衬:
console.log(Object.values({id:“1”,年龄:23,角色编号:90}).length);
Try:Object.values(theObject).length
const myObject=新对象();myObject[“firstname”]=“Gareth”;myObject[“lastname”]=“Simpson”;myObject[“age”]=21;console.log(Object.values(myObject).length);
您可以始终执行Object.getOwnPropertyNames(myObject).length,以获得与[].length为普通数组提供的结果相同的结果。