Существует более простой способ спецификации в ECMAScript 5.
Object.keys(..)
возвращает массив всех ключей, определенных для объекта. Длина может быть названа на этом. Попробуйте в Chrome:
Object.keys({a: 1, b: 2}).length; // 2
Обратите внимание, что в JavaScript все объекты в основном являются парами ключ / значение, и они также очень расширяемы. Вы можете расширить Object.prototype
с помощью метода size
и получить счетчик там. Однако гораздо лучшим решением является создание интерфейса типа HashMap
или использование одной из множества существующих реализаций и определение на нем 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;
};
Использовать как ( пример ):
var map = new HashMap();
map.put(someKey, someValue);
map.size();