我有一个 Javascript 对象,我试图将其用作“ HashMap ”。键始终是字符串,所以我认为我不需要像 this SO question 中描述的那样复杂的东西。 . (我也不希望键的数量超过 10,所以我并不特别关心查找是 O(n) 还是 O(log n) 等)
我想要的唯一功能是内置 Javascript 对象似乎没有的功能是一种快速计算对象中键/值对数量的方法,就像 Java 的 Map.size 一样。返回。当然,你也可以这样做:
function getObjectSize(myObject) {
var count=0
for (var key in myObject)
count++
return count
}
但这似乎有点古怪和迂回。是否有“正确的方法”来获取对象中的字段数?
最佳答案
在 ECMAScript 5 中有一种更简单的方法。
Object.keys(..)
返回对象上定义的所有键的数组。长度可以称为。在 Chrome 中尝试:
Object.keys({a: 1, b: 2}).length; // 2
请注意,所有对象在 JavaScript 中基本上都是键/值对,而且它们的可扩展性也很强。您可以使用 size
方法扩展 Object.prototype
并在那里获取计数。然而,一个更好的解决方案是创建一个 HashMap
类型的接口(interface)或使用现有的许多实现之一,并在其上定义 size
。这是一个微小的实现:
function HashMap() {}
HashMap.prototype.put = function(key, value) {
this[key] = value;
};
HashMap.prototype.get = function(key) {
if(typeof this[key] == 'undefined') {
throw new ReferenceError("key is undefined");
}
return this[key];
};
HashMap.prototype.size = function() {
var count = 0;
for(var prop in this) {
// hasOwnProperty check is important because
// we don't want to count properties on the prototype chain
// such as "get", "put", "size", or others.
if(this.hasOwnProperty(prop) {
count++;
}
}
return count;
};
用作(example):
var map = new HashMap();
map.put(someKey, someValue);
map.size();
关于javascript - 确定一个 Javascript 对象有多少个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3154447/