Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

HashMap in TypeScript with custom object

Introduction

I am currently work in project that I need to save the score of each user.
For this I used a Map<User, number> to represent it.

Problematic

If I create map with a user named john:

let myMap: Map<User, number> = new Map();
myMap.set(new User("John","Hasherman"), 0);

And if I want to set John Hasherman’s score to 1 (voluntarily using a new instance and not the one previously used), with this code:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

myMap.set(new User("John","Hasherman"), 1);

But TypeScript create a new element inside myMap.

Question

So my question is, do you know if it’s possible to customize the comparator used inside the map? like Java when defining hashCode() and equals(o Object)?

>Solution :

You’ll need a way for the User to expose functionality that will identify a particular user, perhaps by name, or perhaps by a more unique ID. Either way, a Map where each user is the key isn’t very suited to the job, but it’s possible.

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);
}

It’s somewhat convoluted. I’d suggest considering a different data structure if possible.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading