Actualmente estoy trabajando en un proyecto que necesito para guardar la puntuación de cada usuario. Para esto usé un Map<User, number> para representarlo.
Si creo un mapa con un usuario llamado john:
let myMap: Map<User, number> = new Map(); myMap.set(new User("John","Hasherman"), 0);Y si quiero poner la puntuación de John Hasherman en 1 (voluntariamente utilizando una nueva instancia y no la utilizada anteriormente), con este código:
myMap.set(new User("John","Hasherman"), 1);Pero TypeScript crea un nuevo elemento dentro de myMap.
Entonces mi pregunta es, ¿sabes si es posible personalizar el comparador que se usa dentro del mapa? como Java al definir hashCode() y equals(o Object) ?
Necesitará una forma para que el usuario exponga la funcionalidad que identificará a un usuario en particular, tal vez por nombre o tal vez por una identificación más única. De cualquier manera, un Mapa donde cada usuario es la clave no es muy adecuado para el trabajo, pero es posible.
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); }Es algo complicado. Sugeriría considerar una estructura de datos diferente si es posible.