回答編集履歴

1

new Map を JSON に変換する

2016/09/28 04:03

投稿

think49
think49

スコア18166

test CHANGED
@@ -1,3 +1,7 @@
1
+ ### オブジェクトのプロパティに順番はない
2
+
3
+
4
+
1
5
  まず、オブジェクトのプロパティを列挙するコードを書いてください。
2
6
 
3
7
  「cesanta/v7」を使用したことはありませんが、ECMAScript 仕様に準ずれば `for-in`, `Object.keys` の列挙順は実装依存です。
@@ -36,4 +40,68 @@
36
40
 
37
41
 
38
42
 
43
+ ### new Map を JSON に変換する
44
+
45
+
46
+
47
+ 定義順で列挙する場合に `new Map` を使う方法があります。
48
+
49
+ new Map はそのまま JSON 化出来ないので二次元配列に変換する事で実装し、JSONから new Map に戻すときには逆の手順で戻します。
50
+
51
+
52
+
53
+ ```JavaScript
54
+
55
+ function mapToArray (map) { // for ES5
56
+
57
+ var entries = map.entries(),
58
+
59
+ array = [],
60
+
61
+ item;
62
+
63
+
64
+
65
+ while (item = entries.next(), !item.done) {
66
+
67
+ array.push(item.value);
68
+
69
+ }
70
+
71
+
72
+
73
+ return array;
74
+
75
+ }
76
+
77
+
78
+
79
+ var map1 = new Map([['a', 1], ['b', 2], ['c', 3]]),
80
+
81
+ JSONString1 = JSON.stringify(mapToArray(map1)),
82
+
83
+ JSONString2, map2;
84
+
85
+
86
+
87
+ map2 = new Map(JSON.parse(JSONString1));
88
+
89
+ JSONString2 = JSON.stringify(mapToArray(map1));
90
+
91
+
92
+
93
+ console.log(map1); // Map {"a" => 1, "b" => 2, "c" => 3}
94
+
95
+ console.log(map2); // Map {"a" => 1, "b" => 2, "c" => 3}
96
+
97
+ console.log(JSONString1); // [["a",1],["b",2],["c",3]]
98
+
99
+ console.log(JSONString2); // [["a",1],["b",2],["c",3]]
100
+
101
+ console.log(JSONString1 === JSONString2); // true
102
+
103
+ ```
104
+
105
+
106
+
39
107
  Re: tsukiji73 さん