【问题标题】:How could i turn a Map() into a string as it is, WITHOUT it becoming a json object in js/ts我怎么能把 Map() 变成一个字符串,而不是它成为 js/ts 中的 json 对象
【发布时间】:2021-12-12 17:38:37
【问题描述】:

基本上我想把一个地图变成一个字符串作为文本。我已经尝试过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。

【问题讨论】:

  • 显示是什么意思?一般来说,没有一种将对象显示为字符串的方式。
  • 是的,有一种方法可以实现它:决定你的 Map 应该是什么样的字符串,然后编写你自己的代码让它看起来像这样。在一般情况下,通过涉及JSON.stringify() 的过程将 Map 实例转换为字符串会很困难,因为 JSON 语法只允许字符串键。

标签: javascript string dictionary


【解决方案1】:

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

function displayMapsWithCustomFormat(m: Map) {

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

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

【讨论】:

    【解决方案2】:

    如果您需要显示像 { 'key' => 'value' } 这样的对象而不是“:”存在于键或值上,您可以这样做

    let data = {'key' : 'value'}
    JSON.stringify(data).replace(":", " => ")
    

    【讨论】:

    • 如果任何键或值包含冒号,这将不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多