【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と同じ内容で、なおかつ参照でないものになる。
コメント