オブジェクトのプロパティに順番はない
まず、オブジェクトのプロパティを列挙するコードを書いてください。
「cesanta/v7」を使用したことはありませんが、ECMAScript 仕様に準ずれば for-in
, Object.keys
の列挙順は実装依存です。
JavaScript
1var obj = {a: 1, b: 2, c: 3},
2 keys = [];
3
4console.log(Object.keys(obj));
5
6for (var key in obj) {
7 keys.push(key);
8}
9
10console.log(keys);
そもそも論としてオブジェクトのプロパティには順番の概念がありません。
順番が重要であれば、配列か new Map
を使ってください。
new Map を JSON に変換する
定義順で列挙する場合に new Map
を使う方法があります。
new Map はそのまま JSON 化出来ないので二次元配列に変換する事で実装し、JSONから new Map に戻すときには逆の手順で戻します。
JavaScript
1function mapToArray (map) { // for ES5
2 var entries = map.entries(),
3 array = [],
4 item;
5
6 while (item = entries.next(), !item.done) {
7 array.push(item.value);
8 }
9
10 return array;
11}
12
13var map1 = new Map([['a', 1], ['b', 2], ['c', 3]]),
14 JSONString1 = JSON.stringify(mapToArray(map1)),
15 JSONString2, map2;
16
17map2 = new Map(JSON.parse(JSONString1));
18JSONString2 = JSON.stringify(mapToArray(map1));
19
20console.log(map1); // Map {"a" => 1, "b" => 2, "c" => 3}
21console.log(map2); // Map {"a" => 1, "b" => 2, "c" => 3}
22console.log(JSONString1); // [["a",1],["b",2],["c",3]]
23console.log(JSONString2); // [["a",1],["b",2],["c",3]]
24console.log(JSONString1 === JSONString2); // true
Re: tsukiji73 さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/27 16:57 編集
2016/09/28 04:05 編集
2016/09/28 14:31
2016/09/28 14:53 編集
2016/09/30 18:27
2020/09/01 07:39 編集
2020/09/01 07:49
2020/09/01 07:51
2020/09/01 07:58