[Javascript] オブジェクトデータのコピー

2014年9月19日

Javascript

javascriptを使っていくと、JSONでデータを構築しておいて、使い回して、値を少しずつ変更していく・・・ような 事って結構便利にできるんだが、コピーするのがオブジェクトの場合、コピー後にとんでもないトラブルになるケースがある。 それは、コピー後に、オブジェクト内のデータを修正しようもんなら、元のオブジェクトのデータが修正されてしまって、 さらにそれを別の箇所にコピーしていようものなら、結果がとんでもない事になることが想像できると思う。 var a = {test1:1,test2:2,test3:3,test4:{aa:"a",bb:"b"}}; var b = a; b.test1 = 100; 結果:a = {test1:100,test2:2,test3:3,test4:{aa:"a",bb:"b"}} これは、javascriptがprototypeっちゅうめんどくさい中核で構成されているため、というとわけわからなくなるんだけど、スピードと効率を考えて、変数は出来る限り参照する形をとっている為だと思われる。 解決法としては、全てのデータをパースして、オブジェクトではなく、変数状態でコピーを行うようにする関数を作ってもいいし、jQueryのextend関数を使うという手もある。 でも、もっとも簡単に解決出来る方法を見つけた!! var b = JSON.parse(JSON.stringify(a)); とするだけなのだ!!! これ簡単、便利、関数にしなくてもいいぐらい楽!! デメリットとしては、旧ブラウザバージョンでどのくらい動くかは不明。 とにかくchromeでは正常に動いた。 あと、オブジェクトの内部にfunctionが存在する場合に正常にparseでfunctionが動作するか不明。※だれか試してくれ。 ちなみに、書いてあったサイトはココです

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。