最近の仕事で、久しぶりにJSを書く機会があり、オブジェクトの扱いでハマったことについての備忘録。

セッションストレージにオブジェクトを保存する際は、オブジェクトをJSON.stringifyで文字列に変換する必要があると以前の記事で紹介した。

通常、これで問題なく保存されるはずだが、あるオブジェクトがこの文字列変換時に空になってしまう問題が発生した。

まず確認するとオブジェクトの初期化の仕方が配列の初期化になっていたため、これを以下のように変更すれば解決するという記事も見かけたが、自分の環境では解決しなかったので別の方法を試してみた。

var obj = [];
↓
var obj = {};

問題の解決法

解決にいたった方法がこちら。

オブジェクトを以下の方法で再生成する。

var newObj = {}; 
Object.keys(obj).forEach(function(key){ 
  newObj[key] = obj[key]; 
});

var objStr = JSON.stringify(newObj);

ここで出来た新しいオブジェクトをJSON.stringifyに渡すと、空になることなく無事に文字列に変換することができた。