如何在JavaScript中使用Google Maps哈希对象引用?

时间:2018-07-23 20:52:28

标签: javascript dictionary ecmascript-6 dynamic-memory-allocation

一个标准的JavaScript对象大概像其他每种语言的hashmap一样实现-密钥模数的哈希大小。这对于对象很有用,对Maps则不那么有用,因为键可以是易变的对象。

最初,我假设它将对密钥的地址进行哈希处理。大!但是,该地址也不是静态的。当数组或对象超出其容量时,它将重新分配到新的内存位置。

鉴于我的“逻辑”假设是错误的,那么Maps如何实现?必须对某事进行哈希处理才能提供O(1)查找。

NB :这与哈希图,字典或其他您想调用的名称​​不同。这特定于JavaScript中的Map对象。

1 个答案:

答案 0 :(得分:-1)

以下是ECMAScript-262标准(2018年6月版)所说的:

  

23.1映射对象

     

地图对象是键/值对的集合,其中键和值都可以是任意ECMAScript       语言值。一个唯一的键值只能出现在地图集合中的一个键/值对中。区别键       使用SameValueZero比较算法来区分值。

     

必须使用哈希表或平均提供访问时间的其他机制来实现Map对象       在集合中元素数量上是次线性的。此Map对象中使用的数据结构       规范仅用于描述Map对象所需的可观察语义。它并非旨在成为可行的实施模型。

以上语句中的最后一条语句指出Javascript标准本身与用于实现Map的机制无关。它只需要在地图上执行查找/更新操作即可在次线性(即通常为O(log(N)))时间内运行。