javascript - 确定一个 Javascript 对象有多少个字段

标签 javascript map size

我有一个 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/

相关文章:

Swift:如何自动设置单元格的高度以在屏幕的整个尺寸上本地化

javascript - ES8 立即调用异步函数表达式

javascript - Angular 2+ : Multiple definitions of a property not allowed in strict mode in IE11

javascript - 如何实现防止输入任意标签的标签选择器?

scala - 如何在Scala中的过滤器, map ,flatMap期间轻松地从一种集合类型转换为另一种集合类型?

unix - UNIX 上的进程大小

javascript - 表单验证和提交

java - map 清除与空

FileInputFormat,其中文件名是 KEY,文本内容是 VALUE

image - 有没有办法让 iPhone 应用程序只让用户下载他们的设备分辨率所需的图形?