我有一个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;
当前回答
Use:
var myArray=新对象();myArray[“firstname”]=“Gareth”;myArray[“lastname”]=“Simpson”;myArray[“age”]=21;obj=对象.keys(myArray).length;控制台日志(obj)
其他回答
如果需要公开其大小的关联数据结构,最好使用映射而不是对象。
const myMap=新映射();myMap.set(“firstname”,“Gareth”);myMap.set(“姓氏”,“辛普森”);myMap.set(“年龄”,21);console.log(myMap.size);//3.
@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方法,并在遍历成员时检查成员的类型。
以下是如何并且不要忘记检查属性是否不在原型链上:
var element_count = 0;
for(var e in myArray)
if(myArray.hasOwnProperty(e))
element_count++;
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Object.values(myObject).lengthObject.entries(myObject).length对象.keys(myObject).length
所有物
Object.defineProperty(Object.prototype, 'length', {
get: function () {
var size = 0, key;
for (key in this)
if (this.hasOwnProperty(key))
size++;
return size;
}
});
Use
var o = {a: 1, b: 2, c: 3};
alert(o.length); // <-- 3
o['foo'] = 123;
alert(o.length); // <-- 4