【问题标题】:initializing a Map<string,string> in Typescript from json object [duplicate]从 json 对象初始化 Typescript 中的 Map<string,string> [重复]
【发布时间】:2017-12-26 00:14:56
【问题描述】:

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

public map:Map<string,string>;
constructor() {
  let jsonString = {
    "peureo" : "dsdlsdksd"
  };
  this.map = jsonString;
}

问题是初始化不起作用。

jsonString 是我将从序列化为 Json 的 Java 对象接收到的东西。

有人可以帮忙吗?谢谢!

【问题讨论】:

  • @MarkRotteveel 我假设是因为该对象是在 Java 应用程序中序列化的。 “ jsonString 是我将从序列化为 Json 的 Java 对象中收到的东西” 但你说得对,这是一个不敬的细节。

标签: javascript json typescript initialization


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我最初将此问题标记为可能重复的问题,但仔细考虑后,我认为纯 Javascript 和 TypeScript 之间存在足够的差异,这是一个独立的问题……我的错!

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

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

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

    元素是键值对的数组或其他可迭代对象。每个键值对都被添加到新的 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 上工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2014-02-11
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多