※ ChatGPTを利用し、要約された質問です(原文:一つの配列変数をいじると連動して他が代わってしまう理由が知りたいです)
配列変数の連動についての問題
このQ&Aのポイント
配列変数を操作すると他の変数が一緒に変わってしまう理由を知りたいです。
_root.flagという配列変数をセーブ&ロードするプログラムで、セーブ・ロード以外の場合には_root.flagの値だけを変化させたいです。
flagSave()とflagLoad()という関数が、_root.flagと_root.savedata.data.flagの値を同期させてしまう問題があるので、解決策を教えてください。
一つの配列変数をいじると連動して他が代わってしまう理由が知りたいです
以下の二つの命令 flagSave() と flagLoad() は、ローカル上に _root.flag の値をセーブ、ロードするプログラムです。
_root.flag は配列変数で、
_root.flag.A = "1"
_root.flag.B ="全角文字"
等、様々な変数が入ります。
_root.flag の値は、色々変化した後、セーブをしないでロード(昔セーブしたデータに戻す)をする場合があります。
私はこれで動くと思ってプログラムしたのですが・・・
一度でも flagSave() か flagLoad() を実行すると、
以後 _root.flag の値を変化させると(_root.flag.A="1" 等の命令実行)、それに連動して _root.savedata.data.flag の値も同じように変化するようになってしまいます。
私のやりたい事は、
セーブ&ロードをする時以外は、_root.flag の値だけを変化させ、_root.savedata.data.flag の値は変動させないようにしたいのです。
何方か、以下のプログラムの悪い点等がわかりましたら、是非とも御教授させてはいただけないでしょうか。
よろしくお願い致します。
------------------------------------------
//================
// フラグのセーブ
//================
function flagSave() {
_root.savedata = SharedObject.getLocal("TEST");
_root.savedata.clear();
_root.savedata.data.flag = new Array;
_root.savedata.data.flag = _root.flag;
_root.savedata.flush();
}
//================
// フラグのロード
//================
function flagLoad() {
_root.savedata = SharedObject.getLocal("TEST");
_root.flag = new Array;
_root.flag = _root.savedata.data.flag;
}
お礼
なるほど、配列2 = 配列1とするだけでは、駄目だったのですね。一件コピーしているようにみえていましたが、参照するだけだったとは・・・。 勉強になりました。 今回の問題は、教えて頂いたURLのページに調べにいったら、無事解決致しました。 本当に助かりました。ありがとうございます!