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。
この解決法は役立ちましたか?
🔗 関連するエラー
- Uncaught ReferenceError: xxx is not defined — 変数・関数名のタイポ
- Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') — 取得しようとしたHTML要素が見つかっていない
- 404 Not Found(スクリプトが読み込まれない) — script の src パスが間違っている
- 計算結果が NaN になる — 文字列を数値に変換していない
- TypeError: xxx is not a function — 関数でないものを呼び出している
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説