网站搜索

reactjs - React/Typescript 多重映射


我刚接触 TypeScript,不知道如何实现 multimap。我有如下代码。我需要遍历 itemArray,并根据日期存储 Item。我需要使用日期作为 multimap 的键。如何在不使用任何外部库的情况下实现这一点?

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

interface Details{
    itemArray: Item[]
}

答案#1

有两种方法可以实现这一点,Map 和可索引类型。

可索引类型

可索引类型是其键和值都有类型的基本对象。

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

操场

地图

Maps 是一个实现哈希映射的 JS 类——当按非字符串/数字类型索引时,这种方法非常有用。

type ItemMap = Map<string, Item[]>

操场

答案#2

一些软件包提供多映射类,但我发现这个足够用于我的任务:

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