← エラー辞典に戻る

JavaScript

配列のコピーが元の配列も変わる

参照のコピーになっている

こんな症状

配列をコピーして変更したら元の配列も変わってしまった。参照の仕組みが原因だよ。

まず試す

コピーは const copy = [...original](スプレッド構文)で作る。

js
const original = [1, 2, 3];
const copy = [...original]; // 中身をコピー
copy.push(4);
console.log(original); // [1, 2, 3] 元は変わらない

これで直らなければ、下の「自分のケース」を確認。

🔍 自分のケースはどれ?

  • = でコピーしたら元も変わる
    → [...original] や Array.from(original) で中身をコピーする。
  • オブジェクトをコピーしたい
    → { ...obj } でコピーする(浅いコピー)。
  • ネストした中身も独立させたい
    → structuredClone(original) で深いコピーをする。

なぜ起きる?

const copy = original のように代入すると、配列の中身ではなく「参照(メモリ上の場所)」がコピーされるよ。copy と original は同じ配列を指しているので、片方を変更するともう片方も変わるんだ。

✕ エラーが起きるコード
const original = [1, 2, 3];
const copy = original;
copy.push(4);
console.log(original); // [1, 2, 3, 4] 元も変わる
✓ 直したコード
const original = [1, 2, 3];
const copy = [...original];
copy.push(4);
console.log(original); // [1, 2, 3] 元は変わらない

✅ 直ったか確認

コピーを変更しても元の配列が変わらなければOK。

🆘 まだ直らないときは

スプレッドは浅いコピー。ネストした配列/オブジェクトの中身は共有されるので、深いコピーは structuredClone を使う。

Q&Aで質問する →

この解決法は役立ちましたか?

🔗 関連するエラー

📖 この問題を学べるレッスン

JSレッスン4:繰り返し処理で根本から理解する →

✏️ 手を動かして練習

このテーマの図解ドリルで実際に書いて確認する →

📝 関連ブログ記事

📖 関連する用語

🚀 JSレッスン4:繰り返し処理で根本解決しよう!

このエラーの背景にある仕組みを、手を動かしながら学べるレッスンがあります。完全無料・登録不要。

JSレッスン4:繰り返し処理へ →

❓ 関連するQ&A