JavaScript | 配列・オブジェクト:配列の追加・削除 – 空配列にする方法

JavaScript JavaScript
スポンサーリンク

空配列にするとは何か

「空配列にする」とは、配列からすべての要素を取り除いて要素数を 0 にすることです。ここが重要です:やり方によって“参照を保つ(同じ配列オブジェクトのまま空にする)”場合と、“別の配列に差し替える”場合があります。どちらを選ぶかで、他の変数やUI状態への影響が変わります。


参照を保ったまま空にする(安全に共有を守る)

length を 0 にする(最短で確実)

const a = [1, 2, 3];
a.length = 0;
console.log(a); // []
JavaScript

ここが重要です:同じ配列インスタンスのまま要素を消します。a を共有している他の変数(同じ参照)にも“空になった”状態が反映されます。共有が前提の状態管理で有効です。

splice で全削除(破壊的だが参照は維持)

const a = [1, 2, 3, 4];
a.splice(0); // 先頭から末尾まで削除
console.log(a); // []
JavaScript

ここが重要です:splice(0) は“全部消す”定番。length=0 と同様に、配列の参照はそのままです。

pop を繰り返す(必要なら取り出し値を利用)

const a = [10, 20, 30];
while (a.length) {
  const x = a.pop(); // 末尾から取り出しつつ削除
  // x をログや集計に使える
}
console.log(a); // []
JavaScript

ここが重要です:取り出しながら空にしたいときに便利です。要素順は末尾からになります。


新しい配列に置き換えて空にする(参照を切り替える)

再代入で空配列をセット

let a = [1, 2, 3];
a = []; // 新しい“空配列”に差し替え
JavaScript

ここが重要です:古い配列の参照を捨て、新しい空配列に差し替えます。注意点は、a と同じ配列を指していた他の変数は“古い配列のまま”になること。共有を切りたいときに向いています。

const 変数は再代入できない

const a = [1, 2, 3];
// a = []; // NG(再代入不可)
a.length = 0; // OK(中身の破棄は可能)
JavaScript

ここが重要です:const は“再代入禁止”ですが、“中身の変更”は可能です。参照を保ったまま空にしたいなら length=0 や splice(0) を使います。


使い分けの指針(参照維持か差し替えか)

参照維持が必要なケース

状態管理や他の変数が同じ配列参照を共有している場合、length=0 や splice(0) で“同じ配列を空にする”べきです。差し替えると共有が途切れ、UIの更新漏れや整合性崩れの原因になります。

差し替えが適切なケース

あるスコープでのみ使い切って“新しく始めたい”とき、または古い配列の参照を他所に残したくないときは a = [] が簡潔です。参照共有がない前提で使います。


部分的に空にする(先頭・末尾・範囲の削除)

先頭だけ除いた新配列(非破壊)

const a = [1, 2, 3];
const withoutFirst = a.slice(1); // [2, 3]
JavaScript

ここが重要です:元を壊さず“先頭を捨てた形”が作れます。差分検知に向いています。

末尾だけ除いた新配列(非破壊)

const a = [1, 2, 3];
const withoutLast = a.slice(0, -1); // [1, 2]
JavaScript

範囲を空にする(連続削除)

const a = [0, 1, 2, 3, 4, 5];
a.splice(2, 3); // 2〜4 を削除 → [0, 1, 5]
JavaScript

ここが重要です:範囲削除は splice が一撃で確実。非破壊で作りたいなら [...]slice を組み合わせます。


よくある落とし穴と回避策

参照共有を忘れて再代入してしまう

a = [] は“別配列”に差し替えです。a を共有していた他の変数には反映されません。共有があるなら a.length = 0a.splice(0) を選びます。

多次元・オブジェクト配列の“浅い”空化で油断する

外側だけ空にしても、内側の参照は別変数に残っていることがあります。完全破棄したい場合は、必要に応じてガベージコレクションに任せる設計(参照を外す)、または新しい構造への置き換えで“到達可能性”を断つ発想を持ちましょう。

const で空にできないと誤解する

再代入は不可ですが、中身のクリアは可能です。a.length = 0a.splice(0) を使います。


まとめ

空配列にする方法は大きく「参照を保って空にする(length=0、splice(0)、pop 連打)」と「新しい空配列に差し替える(a=[])」の二つ。共有参照があるなら前者を、共有を切りたいなら後者を選びます。部分的な空化は slice(非破壊)や splice(破壊的)で実現。この使い分けを徹底すれば、初心者でも“意図通り・副作用なし”で配列を空にできます。

タイトルとURLをコピーしました