reactjs - React/Typescript multimap


Novi sam u TypeScriptu i ne mogu shvatiti kako implementirati multimapu. Imam kod kao dolje. Trebam proći kroz itemArray i pohraniti Item prema datumu. Trebam koristiti datum kao ključ za multimapu. Kako to implementirati bez korištenja bilo kakvih vanjskih biblioteka?

interface Item {
    id: number;
    date: string;
}

interface Details{
    itemArray: Item[]
}

Odgovor #1

Postoje dva načina za postizanje ovoga, Mapovi i indekse tipovi.

Indeksibilni tipovi

Indeksibilne vrste su osnovni objekti čiji su ključevi i vrijednosti tipizirani.

interface ItemMap {
    [key: string]: Item[];
};

Igralište

Karte

Mape su JS klasa koja implementira hash mapu - Ova metoda je korisna kada se indeksira pomoću tipova koji nisu string/number.

type ItemMap = Map<string, Item[]>

Igralište

Odgovor #2

Neki paketi nude klase multimap-a, ali ovo mi je bilo dovoljno za moj zadatak:

type MultiMap<KEY, VALUE> = Map<KEY, Array<VALUE>>;

function mmAdd<KEY, VALUE>(mm: MultiMap<KEY, VALUE>, key: KEY, value: VALUE) {
    const values = mm.get(key);
    if (values === undefined) {
        mm.set(key, [value]);
    } else {
        values.push(value);
    }
}

function usage() {
    const mmap: MultiMap<string, string> = new Map();
    mmAdd(mmap, 'key1', 'value1');
    mmAdd(mmap, 'key1', 'value2');
    mmAdd(mmap, 'key2', 'value3');
}