• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptにおける配列のコピー)

JavaScript配列のコピーについての質問

このQ&Aのポイント
  • JavaScriptにおける配列のコピーについて質問です。配列のコピーは破壊・非破壊の区別がありますが、非破壊のコピーをしたい場合はArray.prototype.clone関数を使用することができます。
  • ただし、3次元配列の場合、このclone関数は破壊的になる可能性があります。例えば、コピーした配列のデータを変えると元の配列も変わってしまいます。
  • 質問者はaaaという3次元配列をbbbにコピーしたいと思っており、var bbb; bbb = aaa.clone();と記述しています。しかし結果的には破壊的なコピーになってしまい、元の配列も変化してしまいます。この問題の解決策について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

コピーが必要なら新たなArrayオブジェクトを作成してこちらを返すようにしないといけないでしょう Array.Prototype.clone = function() {   // 自分自身が配列かをチェック   if ( this[0].constructor == Array ) {     var ar, n;     // 新しい配列を用意する     ar = new Array( this.length );     for ( n = 0; n < ar.length; n++ ) {       // 再起呼び出しで配列の中身をコピー       ar[n] = this[n].clone();     }     // 作成した配列を返す     return ar;   }   return Array.apply( null, this ); } といった具合でうまくいくようです var aaa, bbb, ccc; aaa = new Array(); aaa[0] = new Array(); aaa[1] = new Array(); aar[0][0] = new Array(1,2); aar[0][1] = new Array(3,4); aar[1][0] = new Array(5,6); aar[1][1] = new Array(7,8); bbd = aaa.clone(); ccc = aaa; ccc[0][0][0] = -1; alert( aaa[0][0][0] + "\n" + bbb[0][0][0] + "\n" + ccc[0][0][0]); とすると aaaとcccは-1、bbbは1となっていると思います

suucha
質問者

お礼

できました。。 完璧ですね。再起呼び出しですね、ポイントは! ありがとうございました。

関連するQ&A

専門家に質問してみよう