es6でディープコピーを実現する方法は何ですか?

ES6ではネイティブにディープコピーするためのメソッドがいくつかあり、最もよく使われる方法の一つは次のとおりです。

  1. JSON.parse()
  2. JSON.stringify()
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}

JSON.stringify()メソッドでオブジェクトを文字列に変換し、JSON.parse()メソッドで新しいオブジェクトに変換することでディープコピーを実現する。ただし、関数、正規表現、Dateオブジェクトなどの特殊なオブジェクトはコピーできないことに注意。

  1. 再帰を使用してディープコピーを作成します。
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}

再帰的アプローチでディープコピーを実行し、オブジェクトと配列を走査して、各プロパティに対して再帰的に deepCopy 関数を呼び出してコピーします。このアプローチにより、関数、正規表現、Date オブジェクトなどの特別なオブジェクトを適切にコピーできます。

再帰参照が発生する場合、上記の方式ではスタックオーバーフローが発生する可能性があるので、使う場合は注意が必要。

bannerAds