0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScript/ディープコピー

Last updated at Posted at 2024-12-06

ディープコピーとは

ディープコピーとは、オブジェクトのすべてのレベルのプロパティを再帰的にコピーすることを言います。シャローコピーと違いはコピー元とコピー先が完全に独立することです。

ディープコピーをする方法

JSON.parse()とJSON.stringify()を使った方法がシンプルでわかりやすいです。

const person = {
  name: 'Takuto',
  gender: '',
  info: {
    age: 20,
    interests: 'reading',
  },
};

const copy = JSON.parse(JSON.stringify(person));  //ディープコピー

copy.name = 'Kazuya';
copy.info.age = 21;

console.log(person.name);  //Takuto  変更されない
console.log(person.info.age);  //20  変更されない

メモ
この方法では...
・関数や特殊なオブジェクト(Date, Set, Mapなど)はコピーできない。
・循環参照(オブジェクトが自身を参照する構造)に対応できない。

追記

structuredCloneメソッドを用いてもディープコピーを簡単に行えます。
この方法だと特殊なオブジェクト(Date, Set, Mapなど)のコピーも可能です。

先ほどの例でディープコピーの行をこのようにしても同じ結果になります。

const copy = structuredClone(person);  //ディープコピー
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?