SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Javascript】配列のコピー

問題

配列のコピーをしたいんだけど、コピー元を変更すると、コピー先も変わってしまう!

var a = [0,1,2,3];
var b = a;

a.pop(); // aから1つ要素を抜き出す
alert(b); // bも0,1,2 になっている

a[0] = 9;
alert(b); // 9,1,2 になっている

解答例

配列はオブジェクトなので b = a としたら、bはaのコピーにはならない。元の配列オブジェクトへの参照となる。

for文で全要素をループして空の配列に1つずつコピーしていってもよいけど、

var a = [0,1,2,3];
var b = [];
for (var i = 0, l = a.length; i < l; ++i) {
    b.push(a[i]);
}
a[0] = 9;
alert(b); // 0,1,2,3。bは影響を受けない。

これで済むのでした。

var a = [0,1,2,3];
var b = a.concat();
a[0] = 9;
alert(b); // 0,1,2,3。bは影響を受けない。

array1.concat(array2) は array1とarray2を連結した新しい配列を返してくれるのだが、
array1.concat()で array1と「何もない」を連結した新しい配列を返してくれるので、aと同じ内容で、なおかつ参照でないものになる。

関連するメモ

コメント