gpt4 book ai didi

带有复合键的 Javascript 映射

转载 作者:行者123 更新时间:2023-12-03 16:11:29 25 4
gpt4 key购买 nike

在 JavaScript 中,我想将值存储到复合键,类似于以元组作为键的 C# 字典。这是我遇到 Map 类的地方。但是,它似乎并不像我希望的那样工作。这是我目前的方法:

var test = new Map();

test.set({a: 1, b: 1}, 'Bla');
test.set({a: 5, b: 7}, 'Blub');

test.get({a: 1, b: 1}); // ==> Returns undefined; would expect 'Bla'

我猜,这与 {a: 1, b: 1} 的两个对象有关。具有不同的内存地址,因此相同,但不相同。 Dictionary c# 中的类在后台使用哈希函数。 JS中有类似的东西吗?还是更简单的方法?

我真正的关键对象由三个字符串组成。

最佳答案

你的分析是正确的。它的工作原理是这样的,因为在 Javascript 中,您通常操作的原始对象没有开箱即用地附加所有这些散列行为。不过,没有什么能阻止您在后台使用哈希函数实现自己的字典

class Dictionary {
map = {}

constructor(hashFunction) {
this.hashFunction = hashFunction
}

set(key, item) {
this.map[this.hashFunction(key)] = item
}

get(key) {
return this.map[this.hashFunction(key)]
}

delete(key) {
delete this.map[this.hashFunction(key)]
}
}

const dict = new Dictionary((keyObject) => JSON.stringify(keyObject))
dict.set({ a: 1, b: 2 }, 'hello')
console.log(dict.get({ a: 1, b: 2 })) // hello


至于用什么,Map还是object,Map和object的区别只是object只支持字符串键(也是Symbols,但现在无关紧要),而Map支持任何值,代价是使用更多资源,与旧浏览器的兼容性较差,并且它通常不如 object 方便使用(并且还会阻止 GC 清除您用作键的那些对象)。也就是说,对象是你的选择

关于带有复合键的 Javascript 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61231359/

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