从json对象初始化Typescript中的Map <string,string>

时间:2017-07-20 10:36:53

标签: javascript typescript

我在Typescript中有一个包含地图的课程:

  public map:Map<string,string>;

  constructor() {
    let jsonString = {
      "peureo" : "dsdlsdksd"
    };
    this.map = jsonString;
   }

问题是初始化不起作用? jsonString是我将从序列化为Json的Java对象接收的东西......

任何人都可以提供帮助吗?

由于

2 个答案:

答案 0 :(得分:3)

您必须遍历对象的成员并将其添加到地图中:

public map: Map<string, string> = new Map<string, string>();

constructor() {
    let jsonString = {
        "peureo": "dsdlsdksd"
    };

    for (let member in jsonString) {
        this.map.set(member, jsonString[member]);
    }
}

答案 1 :(得分:0)

我最初将这个问题标记为可能重复,但考虑到这一点我觉得普通Javascript和TypeScript之间存在足够的差异,这是一个独立的问题......我的不好!

当反序列化JSON时,它会生成一个普通对象。

Map是一个特定的类,您只能将普通对象转换为Map对象。

Map的文档说它的构造函数需要:

  

一个Array或其他可迭代对象,其元素是键值对。每个键值对都添加到新Map中; null值被视为未定义。

不幸的是plain objects are not iterable,所以我们无法将对象传递给Map's构造函数。

我们可以做的是遍历属性,检查它们是否是字符串,然后将它们添加到地图中。

let objectStringPropertiesToMap = (obj: Object) => {
    let map = new Map();

    for (let key in obj) {
        let val = obj[key];

        if (typeof val == "string")
            map.set(key, val);
    }
};

这会给你这样的代码:

let obj = {
    "peureo" : "dsdlsdksd"
};

let objectStringPropertiesToMap = (obj: Object) => {
    let map = new Map();

    for (let key in obj) {
        let val = obj[key];

        if (typeof val == "string")
            map.set(key, val);
    }

    return map;
};

let map = objectStringPropertiesToMap(obj);

document.getElementById("output").innerHTML = map.get("peureo");

可以看到工作jsFiddle