シャロ―コピーとディープコピーについて

シャローコピー

TypeScriptでは、配列でこのような書き方はしてはいけない。

const _arr = [1,2,3];
const arr = _arr;

このような書き方をするとarr_arrの参照を取ってしまう。

const _arr = [1,2,3];
const arr = _arr;
_arr[0] = 9;
console.log(arr);

これを実行すると

9,2,3

となる。

そこで使用するのがシャロ―コピー(浅いコピー)。
シャロ―コピーとは、一次元配列をコピー(複製)する際に使うものである。
[...配列名]で書き表される。

const arr = [..._arr];

ディープコピー

ディープコピー(深いコピー)とは、多次元配列をコピー(複製)する際に使うものである。
もっとも簡単なのはこれ

const arr = JSON.parse(JSON.stringify(_arr));

関数にするならこれ。

function deepCopy<T>(obj: T): T { 
	return JSON.parse(JSON.stringify(obj)); 
}
 
const originalArray = [1, 2, [3, 4];
const copiedArray = deepCopy(originalArray);