Используйте вместо него Map
, чтобы сохранить порядок размещения.
let m = new Map;
m.set("2", "val");
m.set("1", "val");
m.forEach((v,k)=>console.log(k,"=",v));
Чтобы преобразовать его в JSON, вы можете преобразовать записи Map
. Вы можете использовать синтаксический анализ строки и передать записи конструктору Map, чтобы преобразовать ее обратно.
const map = new Map([
['foo', 10],
['baz', 42]
]);
let str = JSON.stringify([...map.entries()])
console.log(str);
new Map(JSON.parse(str)).forEach((v,k)=>console.log(k,"=",v));
Вы можете предоставить обратный вызов JSON .stringify и JSON .parse для преобразования вложенных структур карты.
let m = new Map;
m.set("b", new Map([["c","d"],["e","f"], ["d", new Map([["a", 1]])]]));
let str = JSON.stringify(m, (key,val)=>{
return Object.prototype.toString.call(val) === '[object Map]' ? [...val.entries()] : val;
});
console.log(str);
let m2 = JSON.parse(str, (key, val)=>{
return Array.isArray(val) && Array.isArray(val[0]) ? new Map(val) : val;
});
console.log(m2);
Демо: https://jsfiddle.net/ob8d2uLf/1/