是否可以在Map()中存储自定义对象?

时间:2019-05-06 17:34:07

标签: javascript typescript

我的回复类型如下:

interface IDictionaryKey {
    text: string;
}


let data = response<IDictionaryKey>[];

是否可以对new Map()设置整个响应?

类似的东西:

dictionary = new Map<IDictionaryKey[]>();

1 个答案:

答案 0 :(得分:1)

您可以将整个响应设置为new Map()。我看到以下选项:

  1. 完整响应数组将转到Map的单个元素。如果您要接收类型为IDictionaryKey[]的其他响应并将其存储在dictionary中,则这很有用。 (例如reponse2response3等)。

    let data: IDictionaryKey[] = response<IDictionaryKey>[];
    let dictionary = new Map<string, IDictionaryKey[]>();
    dictionary.set("response1", data);
    // Now you can retriev first response by 
    let response1 = dictionary.get("response1");
    
  2. 响应数组的每个元素都将转到Map的单个元素。这是一个问题。 IDictionaryKey接口仅包含一个属性text。为了使Map有用,最好至少具有两个属性,一个是键,另一个是-值。但是IDictionaryKey甚至可以具有一个属性,也可以放在Map中。

    let data: IDictionaryKey[] = response<IDictionaryKey>[];
    let dictionary = new Map<IDictionaryKey, any>();
    data.forEach(d => dictionary.set(d, "" as any));
    // As a result, Map will have only keys. All values will be empty strings
    // Now you can retrive element by
    let elem: IDictionaryKey = {text: "something"};
    let dictionaryElement = dictionary.get(elem); 
    // dictionaryElement will always be either "" or undefined
    

    当然,您可以使用data数组以不同的方式将其添加到Map中。例如

    let dictionary = new Map<string, IDictionaryKey>();
    data.forEach(d => dictionary.set(d.text, d));
    // And get each element from Map only by text property
    let dictionaryElement: IDictionaryKey = dictionary.get("MyText");
    

最后一条提示。 Map具有构造函数,因此可以在构造过程中填充Map

let dictionary = new Map<IDictionaryKey, any>(data.map<[IDictionaryKey, any]>(d => [d, "" as any]));