如何实现 JavaScript 哈希映射?

2022-08-30 05:32:33

我目前使用OpenLayers,并且有一组庞大的数据要绘制到矢量层(大于100000个矢量)中。

我现在正试图将所有这些向量放入JavaScript哈希图中以分析性能。我想知道JavaScript中的哈希映射是如何实现的,它是一个真正的哈希函数还是只是一个使用简单数据结构和搜索算法的包装函数?


答案 1

每个javascript对象都是一个简单的哈希图,它接受字符串或符号作为其键,因此您可以将代码编写为:

var map = {};
// add a item
map[key1] = value1;
// or remove it
delete map[key1];
// or determine whether a key exists
key1 in map;

javascript对象在其实现上是一个真正的哈希图,因此搜索的复杂性是O(1),但是javascript字符串没有专用函数,它由javascript引擎内部实现(V8,SpiderMonkey,JScript.dll等)。hashcode()

2020年更新:

今天的javascript也支持其他数据类型:MapWeakMap。它们比传统对象更像哈希映射。


答案 2

JavaScript 对象不能纯粹在哈希映射之上实现。

请在浏览器控制台中尝试此操作:

var foo = {
    a: true,
    b: true,
    z: true,
    c: true
}

for (var i in foo) {
    console.log(i);
}

...您将按广告订单顺序接收它们,这是事实上的标准行为。

哈希映射本质上不保持排序,因此JavaScript实现可能会以某种方式使用哈希映射,但如果它们这样做,它至少需要一个单独的索引和一些额外的簿记插入。

以下是 Lars Bak 的视频,解释了为什么 v8 不使用哈希映射来实现对象