Comment avez-vous JSON.stringify un ES6 Carte?
J'aimerais commencer à utiliser ES6 Carte au lieu des objets JS, mais je me suis retenue parce que je peux pas comprendre comment le JSON.stringify (), une Carte. Mes clés sont garantis d'être des chaînes de caractères et de mes valeurs seront toujours des listes. Dois-je vraiment écrire un wrapper méthode pour sérialiser?
- article intéressant sur le sujet 2ality.com/2015/08/es6-map-json.html
- J'ai pu obtenir que cela fonctionne. Les résultats sont sur Plunkr incorporer.plnkr.co/oNlQQBDyJUiIQlgWUPVP. La solution utilise un JSON.stringify(obj, replacerFunction) qui vérifie si un objet Map est passé et convertit la Carte de l'objet à l'objet Javascript (que JSON.stringify) va ensuite convertir en une chaîne de caractères.
- Si vos clés sont garantis d'être des chaînes de caractères (ou chiffres) et votre les valeurs des tableaux, vous pouvez faire quelque chose comme
[...someMap.entries()].join(';')
; pour quelque chose de plus complexe, vous pouvez essayer quelque chose de similaire en utilisant quelque chose comme[...someMap.entries()].reduce((acc, cur) => acc + `${cur[0]}:${/* do something to stringify cur[1] */ }`, '')
- Que faire si c'est possible pour le nom de la clé de même que les propriétés par défaut?
obj[key]
peut obtenir de vous quelque chose d'inattendu. Prenons le casif (!obj[key]) obj[key] = newList; else obj[key].mergeWith(newList);
. - Pourquoi avez-vous rouvrir ce?
- Il n'était pas tout à fait un doublon de ce qui vous y est lié, à mon avis.
- La question est rédigée de façon un peu différente, mais si vous insistez, je vais reposter ma réponse ici 🙂
- Voir ma nouvelle réponse. Merci de considérer elle-il est probable que ce que les gens sont à la recherche de stackoverflow.com/a/54140811/124486
- Pourquoi êtes-vous à l'aide d'une Carte, si vos clés sont des chaînes de caractères?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas.
Les clés d'une carte peut être n'importe quoi, y compris des objets. Mais JSON syntaxe permet uniquement des chaînes de caractères comme des clés. Il est donc impossible dans un cas général.
Dans ce cas, vous pouvez utiliser un objet ordinaire. Il aura ces avantages:
hasOwnProperty
. Sans cela, Firefox itère des objets beaucoup plus rapide que les cartes. Les cartes sont toujours plus rapide que sur Chrome, cependant. jsperf.com/es6-map-vs-object-properties/95JSON.stringify(Array.from(myMap.entries()))
Vous ne pouvez pas directement stringify la
Map
exemple car il n'a pas toutes les propriétés, mais vous pouvez le convertir en un tableau de n-uplets:Pour l'inverse, l'utilisation
Map
s, il va bien avec le constructeur et l'itérateur. C'est aussi le seul sensible de la représentation de cartes qui ont des clés de chaîne, et l'objet ne serait pas là.JSON.stringify(Object.fromEntries(map.entries()))
etnew Map(Object.entries(JSON.parse(jsonText)))
Il n'existe pas de méthode prévue par l'ecmascript encore, ce qui peut encore être fait à l'aide de
JSON.stingify
si vous mappez leMap
à un JavaScript primitive. Voici l'exemple deMap
nous allons utiliser.Aller à un Objet JavaScript
Vous pouvez convertir le JavaScript littéral d'Objet avec la fonction d'assistance suivante.
Aller à un Tableau d'Objets JavaScript
La fonction d'assistance pour celui-ci serait encore plus compact
Allez Tableau de Tableaux
C'est encore plus facile, vous pouvez simplement utiliser
Les deux
JSON.stringify
etJSON.parse
une deuxième argument.replacer
etreviver
respectivement. Avec de la poudre et des reviver ci-dessous, il est possible d'ajouter le support natif de la Carte de l'objet, y compris profondément imbriqués les valeursUtilisation:
Profonde imbrication avec la combinaison de Tableaux, des Objets et des Cartes
Ci-dessous la solution fonctionne même si vous avez imbriquée Cartes