Как я мог бы превратить Map() в строку как она есть, НЕ превращая ее в объект json в js/ts

#javascript #string #dictionary

Вопрос:

В принципе, я хочу превратить карту в строку в виде текста. Я пробовал toString() и шаблонные литералы, но они, очевидно, возвращают [карту объектов]. Я также видел, что некоторые люди преобразовали карту в объект, а затем вызвали JSON.stringify() его.

Однако я не хочу, чтобы моя карта отображалась как объект JSON, а как реальная карта

Предположим, у меня была карта

 { 'key' =gt; 'value' }  

я хочу, чтобы он отображался так, как показано выше, а не так, как показано ниже

 {  "key": "value" }  

Есть ли какой-нибудь способ, которым я мог бы этого добиться?

ОБНОВЛЕНИЕ: После некоторых экспериментов я, наконец, нашел подходящий метод

 const convertMapToString = (m: Maplt;string, IGuildCache | objectgt;) =gt; {   let mapEntries = [...m.keys()]   return '{n'   mapEntries.map(k =gt; {  return ' '   k   ' =gt; '   JSON.stringify(m.get(k), null, 2)  }).join(',n')   'n}' }  

Значения карты были объектами, поэтому я не возражал против их преобразования в JSON.

Комментарии:

1. Что вы имеете в виду под дисплеем? вообще не существует способа отображения объекта в виде строки.

2. Да, есть способ добиться этого: решите, как должна выглядеть ваша карта в виде строки, а затем напишите свой собственный код, чтобы она выглядела именно так. Преобразование экземпляра карты в строку с помощью процесса, включающего JSON.stringify() в себя, в общем случае будет затруднено, поскольку синтаксис JSON допускает только строковые ключи.

Ответ №1:

Вам придется создавать свои собственные функции, может быть, что-то вроде :

 function displayMapsWithCustomFormat(m: Map) {   let asStrings = m.map((key, value) =gt; `"${key}" =gt; "${value}"`);  console.log("{n"   asStrings.join(",n")   "}"); }   

Не проверено, но вы можете попробовать. Вы можете немного усложнить, если будете использовать другие типы. Например, если у вас есть вложенная карта, сделайте эту функцию рекурсивной.

Ответ №2:

если вам нужно отобразить объект типа { ‘ключ’ =gt; ‘значение’}, а не «:» существует для ключа или значения, вы можете это сделать

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

Комментарии:

1. это не сработает, если какие-либо ключи или значения содержат двоеточие