2017年4月21日金曜日

循環参照や参照の重複に対応したJSON化関数

先日公開したJSON化関数では、循環参照を含むオブジェクトを与えられると無限ループにはまってしまう問題がありました。また、複数のプロパティから単一のオブジェクトを参照しているケースではプロパティごとに異なるオブジェクトとして扱ってしまう問題がありました。

上記の問題を解消する方法を思いつき、サンプルを作成したので公開します。

まず、旧verのJSON化関数に「参照が重複しているプロパティを持つオブジェクト」を与えると以下のようになってしまいます。
※元々はobj.aとobj.bの中身は同じ配列だったので、例えば「obj.a.push(1)」を実行するとobj.bから参照している配列でも要素が増えるが、旧verのJSONで再現したものではobj.aとobj.bのそれぞれが別の配列を参照しているので、片方にpushしてももう片方には影響しない。再現できていない。


本日公開するJSON化関数では、元のオブジェクトの構造を正しく再現できるため、以下のようになります。


最新のJSON化関数のソースは以下。

0 件のコメント:

コメントを投稿