配列のコピー

Javascript 配列のコピーには「シャローコピーとディープコピー」があります。

配列の参照

【実行画面】


【Source Code】
<script type="text/javascript">
var src = ["A", "B", 1, 2];
var copied = src;
 
src[0] = 0;
copied[1] = 0;
 
document.write("src : " + src + "<br>");
document.write("copied : " + copied);
</script>

var src = ["A", "B", 1, 2]; で配列を定義して、copied = src でコピーします。
copied は src の参照(シャローコピー)で、元の src が変われば copied も変わります。
また copied は src を指しているので、copied が変われば src も変わります。
src[0] = 0;
copied[1] = 0;

ディープコピー

【実行画面】


【Source Code】
<script type="text/javascript">
var src = ["A", "B", 1, 2];
var copied = src.slice(0);
 
src[0] = 0;
copied[1] = 0;
 
document.write("src : " + src + "<br>");
document.write("copied : " + copied);
</script>

var src = ["A", "B", 1, 2]; で配列を定義して、copied = src.slice(0) でコピーします。
slice() 関数は配列の一部を切り出す関数ですが、0 を指定(または省略)すると全ての要素が対象になります。
参照と違って src と copied は別物です。
従って src を変更しても copied には影響しません。

slice() に代えて concat() を使うこともできます。
concat() は配列に要素を追加した配列を返すものですが、要素を追加しなければ元々の配列のコピーが返されます。
【実行画面】


【Source Code】
var copied = src.concat();

前田稔の超初心者のプログラム入門
超初心者のプログラム入門(JavaScript)