javascript - 如何从 TypeScript 中的地图中的自定义键类型中获取对象?
问题描述
我有一个名为的自定义类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()
方法Map
从tuples 数组的形式中获取所有条目[key, value][]
。然后,您可以在那里找到您想要使用的任何条目Array.find()
。Map
本身没有这样的方法。
但是,更好的方法是重新考虑您的数据结构。考虑到 的限制,Map
最好将原始数据类型作为Map
. 由于我不知道你的具体情况,我只能提供这个一般性建议。
推荐阅读
- javascript - 如何使用 JavaScript 中的通知 API 在桌面通知中添加动画 GIF
- node.js - 在 ng serve 命令上找不到构建器 @angular-devkit/build-angular:dev-server 的实现
- elasticsearch - 使用 Painless 将日期转换为年月日格式
- jquery - Laravel,如何通过从复选框发送多个值来使用 ajax 从控制器获取结果
- python-3.x - builtins.TypeError:列表索引必须是整数或切片,而不是列表
- regex - 使用 sed 剪切最后一列的意外结果
- eclipse - 如何使用 scala 创建接口
- php - 如何将phpize更改为当前版本
- javascript - 运行“排毒测试”时找不到模块@jest/reporters
- javascript - 如何让 d3 树图单元格文本换行而不溢出其他单元格