gpt4 book ai didi

javascript - 那里有什么好的 JavaScript 散列(代码/表)实现吗?

转载 作者:数据小太阳 更新时间:2023-10-29 04:53:43 25 4
gpt4 key购买 nike

是的,我知道您可以在 JavaScript 中使用常规对象作为关联数组,但我想使用更接近 java Map 实现的东西(HashMap、LinkedHashMap 等)。可以将任何类型的数据用作 key 的东西。 JavaScript 实现中是否有任何好的散列(代码/表)?

最佳答案

在 javascript 中,对象实际上是一种哈希实现。 Java HashMap 有点像假的,所以我挑战您重新考虑您的需求。

直接回答是否定的,我不相信 javascript 中有 Java 的 HashMap 的出色实现。如果存在,它必然是您可能想要或可能不想使用的库的一部分,并且您当然不需要包括一个库只是为了有一个小哈希表。

那么让我们继续写一个,只是为了检查问题。如果你喜欢,你可以使用它。我们将从编写一个构造函数开始,我们将搭载 Array,它是 Object,但有一些有用的方法可以避免这个例子变得过于乏味:

function HashMap () {
var obj = [];
return obj;
}

var myHashMap = HashMap();

我们将添加一些直接来自 Java 世界的方法,但在我们进行时将其转换为 javascript...

function HashMap() {
var obj = [];
obj.size = function () {
return this.length;
};
obj.isEmpty = function () {
return this.length === 0;
};
obj.containsKey = function (key) {
for (var i = 0; i < this.length; i++) {
if (this[i].key === key) {
return i;
}
}
return -1;
};
obj.get = function (key) {
var index = this.containsKey(key);
if (index > -1) {
return this[index].value;
}
};
obj.put = function (key, value) {
if (this.containsKey(key) !== -1) {
return this.get(key);
}
this.push({'key': key, 'value': value});
};
obj.clear = function () {
this = null; // Just kidding...
};
return obj;
}

我们可以继续构建它,但我认为这是错误的方法。归根结底,我们最终还是使用了 javascript 在幕后提供的功能,因为我们只是没有 HashMap 类型。在伪装的过程中,它适合各种额外的工作

具有讽刺意味的是,使 javascript 成为如此有趣和多样化的语言的其中一个原因是它处理这种摔跤的轻松程度。我们真的可以做任何我们想做的事,这里的快速示例如果不能说明语言的欺骗性,就什么都不做。然而鉴于这种力量,似乎最好不要使用它

我只是觉得 javascript 想要更轻量。我个人的建议是在尝试实现正确的 Java HashMap 之前重新检查问题。 Javascript 既不想也负担不起

记住 native 替代方案:

var map = [{}, 'string', 4, {}];

..相比之下,如此快速和简单。

另一方面,我不认为这里有任何一成不变的答案。此实现确实可能是一个完全可以接受的解决方案。如果您觉得可以使用它,我会说试一试。但如果我觉得我们有相当简单和更自然的方法可供我们使用,我就永远不会使用它……我几乎可以肯定我们会这样做。

旁注:效率与风格有关吗?注意性能影响.. HashMap.put() 中有一个大 O 正盯着我们看... 性能欠佳可能不是问题,而您在您甚至注意到现代浏览器的性能问题之前,您可能需要做一些非常雄心勃勃的事情或拥有大量数据。有趣的是,当你逆着规律工作时,操作往往会变得效率较低,就好像有一种自然的熵在起作用一样。 Javascript 是一种高级语言,当我们遵守它的约定时,它应该提供高效的解决方案,就像 Java 中的 HashMap 将是一个更自然和高性能的选择一样。

关于javascript - 那里有什么好的 JavaScript 散列(代码/表)实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/225367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com