我在Typescript中有一个包含地图的课程:
public map:Map<string,string>;
constructor() {
let jsonString = {
"peureo" : "dsdlsdksd"
};
this.map = jsonString;
}
问题是初始化不起作用? jsonString是我将从序列化为Json的Java对象接收的东西......
任何人都可以提供帮助吗?
由于
答案 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
的文档说它的构造函数需要:
一个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。