带有自定义对象的 TypeScript 中的 HashMap
HashMap in TypeScript with custom object
简介
我目前正在做一个项目,我需要保存每个用户的分数。
为此我用了一个Map<User, number>
来表示它。
有问题
如果我用名为 john 的用户创建地图:
let myMap: Map<User, number> = new Map();
myMap.set(new User("John","Hasherman"), 0);
如果我想将 John Hasherman 的分数设置为 1(自愿使用新实例而不是之前使用的实例),请使用以下代码:
myMap.set(new User("John","Hasherman"), 1);
但是 TypeScript 在 myMap 中创建了一个新元素。
问题
所以我的问题是,您知道是否可以自定义地图中使用的比较器吗?像定义 hashCode()
和 equals(o Object)
?
时的 Java
您需要一种方法让用户公开识别特定用户的功能,可能是通过名称,也可能是通过更独特的 ID。无论哪种方式,每个用户都是关键的地图不太适合这项工作,但它是可能的。
class User {
public first: string;
public last: string;
constructor(first: string, last: string) {
this.first = first;
this.last = last;
}
}
const myMap: Map<User, number> = new Map();
myMap.set(new User("John","Hasherman"), 0);
// to set John's value to 1:
const foundJohn = [...myMap.keys()].find(
obj => obj.first === 'John' && obj.last === 'Hasherman'
);
if (foundJohn) {
myMap.set(foundJohn, 1);
}
有点绕。如果可能,我建议考虑使用不同的数据结构。
简介
我目前正在做一个项目,我需要保存每个用户的分数。
为此我用了一个Map<User, number>
来表示它。
有问题
如果我用名为 john 的用户创建地图:
let myMap: Map<User, number> = new Map();
myMap.set(new User("John","Hasherman"), 0);
如果我想将 John Hasherman 的分数设置为 1(自愿使用新实例而不是之前使用的实例),请使用以下代码:
myMap.set(new User("John","Hasherman"), 1);
但是 TypeScript 在 myMap 中创建了一个新元素。
问题
所以我的问题是,您知道是否可以自定义地图中使用的比较器吗?像定义 hashCode()
和 equals(o Object)
?
您需要一种方法让用户公开识别特定用户的功能,可能是通过名称,也可能是通过更独特的 ID。无论哪种方式,每个用户都是关键的地图不太适合这项工作,但它是可能的。
class User {
public first: string;
public last: string;
constructor(first: string, last: string) {
this.first = first;
this.last = last;
}
}
const myMap: Map<User, number> = new Map();
myMap.set(new User("John","Hasherman"), 0);
// to set John's value to 1:
const foundJohn = [...myMap.keys()].find(
obj => obj.first === 'John' && obj.last === 'Hasherman'
);
if (foundJohn) {
myMap.set(foundJohn, 1);
}
有点绕。如果可能,我建议考虑使用不同的数据结构。