忘れてしまいそうなのでメモしておく。
jsで配列のコピーの方法として、slice()やconcat()を使ってコピーする方法がある。
本来の用途としては、配列の連結(concat)や切り出し(slice)などだが挙動が以下のようになっているので、配列のコピーとしても使われている
- 元の配列を変更はしない
- 元の配列から取り出された要素のコピーを含むシャローコピー( 1 段階の深さのコピー)を返す
また配列の中にある値については
- 文字列や数値は、新しくコピー。元の配列に影響なし。
- オブジェクトは参照をコピー。元の配列に影響あり。
となっているよう。
sample
var object = {
a: 1,
b: 2,
};
var arr1 = ["A", "B", object];
var arrCopy = arr1.slice();
arrCopy[1] = "C";
arrCopy[2].a = 3;
console.log(arr1);
// => [ 'A', 'B', { a: 3, b: 2 } ]
console.log(arrCopy);
// => [ 'A', 'C', { a: 3, b: 2 } ]