我目前使用 OpenLayers,并且有大量数据可以绘制到矢量图层(超过 100000 个矢量)。
我现在正尝试将所有这些向量放入 JavaScript 哈希图中以分析性能。我想知道 JavaScript 中的哈希映射是如何实现的,它是一个真正的哈希函数还是只是一个使用简单数据结构和搜索算法的包装函数?
原文由 Patrick Hillert 发布,翻译遵循 CC BY-SA 4.0 许可协议
我目前使用 OpenLayers,并且有大量数据可以绘制到矢量图层(超过 100000 个矢量)。
我现在正尝试将所有这些向量放入 JavaScript 哈希图中以分析性能。我想知道 JavaScript 中的哈希映射是如何实现的,它是一个真正的哈希函数还是只是一个使用简单数据结构和搜索算法的包装函数?
原文由 Patrick Hillert 发布,翻译遵循 CC BY-SA 4.0 许可协议
JavaScript 对象不能完全在哈希映射之上实现。
在你的浏览器控制台试试这个:
var foo = {
a: true,
b: true,
z: true,
c: true
}
for (var i in foo) {
console.log(i);
}
…您将按插入顺序收到它们,这是 事实上的标准 行为。
哈希映射本质上不保持顺序,因此 JavaScript 实现可能会以某种方式 使用 哈希映射,但如果这样做,它至少需要一个单独的索引和一些额外的插入簿记。
这是 Lars Bak 的一段视频,解释了为什么 v8 不使用哈希映射来实现对象。
原文由 Craig Barnes 发布,翻译遵循 CC BY-SA 3.0 许可协议
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
每个javascript 对象 都是一个简单的hashmap,它接受一个字符串或一个 符号 作为它的键,所以你可以把你的代码写成:
javascript对象在其实现上是一个真正的hashmap,所以搜索的复杂度是O(1),但是对于javascript字符串没有专门的
hashcode()
函数,它是由javascript引擎内部实现的(V8,SpiderMonkey,JScript.dll, ETC…)2020 年更新:
今天的 javascript 也支持其他数据类型:
Map
和WeakMap
。与传统对象相比,它们的行为更接近于哈希映射。