我有一个自定义类,名为Foo
:
class Foo {
constructor(public v: any) {
}
}
我有一张地图,Foo
我的钥匙在哪里:
const map = new Map<Foo, string>();
AFAIK TypeScript没有比较重载。如何确保获取密钥正常工作?
const foo = new Foo(1234);
map.get(foo);
这是完整的代码:
class Foo {
constructor(public v: any) {
}
}
const map = new Map<Foo, string>();
const foo = new Foo(1234);
map.set(foo, "HELLO WORLD");
const foo2 = new Foo(1234);
console.log(map.get(foo2)); // DOESN'T work
console.log(map.get(foo)); // DOES work of course
您遇到的问题与TypeScript无关,而是JavaScript没有参照透明性。因此,这样的比较new Foo(123) === new Foo(123)
总是虚假的。
解
JavaScript的Map
api相当有限。如果要使用自定义比较功能(在这种情况下按值比较)查找特定条目,我建议使用.entries()
method以Map
元组数组的形式从中获取所有条目[key, value][]
。然后,您可以在其中找到要使用的任何条目Array.find()
。在Map
本身没有任何这样的方法。
但是,更好的方法是重新考虑您的数据结构。考虑到的局限性,Map
最好将原始数据类型作为中的键Map
。由于我不知道您案件的具体情况,因此我只能提出一般建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句