首页 > 解决方案 > 我怎么能把 Map() 变成一个字符串,而不是它成为 js/ts 中的 json 对象

问题描述

基本上我想把一个地图变成一个字符串作为文本。我已经尝试过toString()模板文字,但那些显然返回 [object Map]。我还看到有些人将 Map 转换为对象然后调用JSON.stringify()它。

但是我不希望我的地图显示为 JSON 对象,而是显示为实际的地图

假设我有一张地图

{ 'key' => 'value' }

我希望它像上面那样显示,而不是像下面那样显示

{
  "key": "value"
}

我有什么办法可以做到这一点?

更新:经过一些试验,我终于找到了一个足够好的方法

const convertMapToString = (m: Map<string, IGuildCache | object>) => {

    let mapEntries = [...m.keys()]

    return '{\n' + mapEntries.map(k => {
        return '    ' + k + ' => ' + JSON.stringify(m.get(k), null, 2)
    }).join(',\n') + '\n}'
}

地图的值是对象,所以我不介意将它们转换为 JSON。

标签: javascriptstringdictionary

解决方案


您必须创建自己的函数,可能类似于:

function displayMapsWithCustomFormat(m: Map) {

  let asStrings = m.map((key, value) => `"${key}" => "${value}"`);
  console.log("{\n" + asStrings.join(",\n") + "}");
}

没有测试,但你可以试一试。如果你特别喜欢其他类型,你可以稍微复杂一点。就像你有嵌套地图一样,让这个函数递归。


推荐阅读