では「配列から要素を削除する方法」をプログラミング初心者向けにかみ砕いて、たっぷり実例付きで説明します。コードはそのままブラウザの開発者ツール(Console)や Node.js で試せます。
配列の要素を削除する — 基本の3つ(pop / shift / length)
まずはよく使うシンプルなやり方を順に説明します。
1. pop() — 配列の最後を抜く(取り出して削除)
- 何をする?:配列の最後の要素を削除して、その要素を返す。
- 典型的な場面:スタック(後入れ先出し)を実装するとき。
let fruits = ['apple', 'melon', 'peach'];
let removed = fruits.pop(); // removed === 'peach'
console.log(removed); // 'peach'
console.log(fruits); // ['apple', 'melon']
JavaScriptポイント
- 空の配列に
pop()をするとundefinedが返る(エラーにはならない)。 - 一般に高速(末尾の操作なので効率的)。
2. shift() — 配列の最初を抜く(取り出して削除)
- 何をする?:配列の先頭(index 0)の要素を削除して、その要素を返す。
- 典型的な場面:キュー(先入れ先出し)を実装するとき。
let q = ['first', 'second', 'third'];
let first = q.shift(); // first === 'first'
console.log(first); // 'first'
console.log(q); // ['second', 'third']
JavaScriptポイント
shift()は先頭を削るので、残りの要素を左へ詰める(内部で再インデックス化される)。要素数が多いと少し重い(パフォーマンスに注意)。- 空の配列に
shift()をするとundefined。
3. length を使う — 配列の長さを直接変更して末尾をまとめて削る
- 何をする?:
array.length = Nとすると、配列の長さをNに切り詰めたり伸ばしたりできる。Nを現在より小さくすると末尾が削られる。
let arr = [1,2,3,4,5];
arr.length = 3;
console.log(arr); // [1,2,3]
arr.length = 0;
console.log(arr); // []
JavaScriptポイント
- 末尾を一気に消したいときに便利(全消しは
length = 0が速い)。 lengthを増やすと「空スロット」ができる(ほとんど使わない操作)。
任意の位置(真ん中)や範囲を削除したいとき
上の方法は「先頭・末尾・一気に短くする」用途に向きます。 配列の途中の要素を削除したいなら、次を使います。
splice(start, deleteCount, ...items) — 真ん中の削除や置換ができる魔法のメソッド
- 何をする?:
startからdeleteCount個を配列から取り除く(必要ならその場所にitemsを挿入できる)。 - in-place(元の配列を書き換える)。
let nums = [10,20,30,40,50];
nums.splice(2, 1); // index 2 の要素を1個削除(30 を削除)
console.log(nums); // [10,20,40,50]
// 連続して複数を削除
let a = [1,2,3,4,5];
a.splice(1, 3); // index 1 から 3 個(2,3,4)削除
console.log(a); // [1,5]
// 削除と同時に挿入(置換のように使える)
let b = ['a','b','c','d'];
b.splice(1, 2, 'x', 'y'); // 'b','c' を削除して 'x','y' を挿入
console.log(b); // ['a','x','y','d']
JavaScriptポイント
spliceは強力だが元の配列を直接変更する(必要ならコピーを作ってから使う)。spliceの戻り値は削除された要素の配列(使いたい場合は受け取れる)。
配列を変えずに“削除したような結果”を作る(不変イミュータブルな操作)
元の配列を残して新しい配列で削除済みの結果がほしい場合は filter やスプレッド+ slice を使います。
filter(条件を満たす要素だけ残す)
let nums = [1,2,3,4,5];
let without3 = nums.filter(n => n !== 3);
console.log(without3); // [1,2,4,5]
console.log(nums); // [1,2,3,4,5] // 元は変わらない
JavaScriptslice(部分を取り出して新しい配列にする)
slice(start, end)はstartからend-1までの要素を新しい配列で返す。
let arr = ['a','b','c','d','e'];
// index 2 の 'c' を除きたい → 左右を結合
let result = arr.slice(0,2).concat(arr.slice(3));
console.log(result); // ['a','b','d','e']
JavaScriptポイント
- 不変(immutable)操作は React などのライブラリでよく推奨される(元データを壊さない)。
パフォーマンスのヒント(初心者でも知っておくと便利)
pop()は末尾操作で速い(定数時間)。shift()やspliceで先頭近くを削ると、残りを詰めるため要素数が多いと遅くなることがある(線形時間)。大量データを頻繁に先頭から削るならデータ構造を考えよう(例:リンクリストや二重キューなど)。filterやsliceは新しい配列を作るのでメモリを多めに使う。
練習問題(手を動かして覚えよう) — 解答付き
問題1
配列 ['red','green','blue','yellow'] から最後の要素を取り出し、取り出した要素と残った配列を表示してください。
解答
let colors = ['red','green','blue','yellow'];
let last = colors.pop();
console.log(last); // 'yellow'
console.log(colors); // ['red','green','blue']
JavaScript問題2
配列 [10,20,30,40,50] の真ん中にある 30 を削除するには?
解答
let nums = [10,20,30,40,50];
nums.splice(2, 1); // index 2 を 1 個削除
console.log(nums); // [10,20,40,50]
JavaScript問題3
配列 [1,2,3,4,5] から 3 を削除して、新しい配列として得たい(元の配列は変えない)場合は?
解答
let a = [1,2,3,4,5];
let b = a.filter(x => x !== 3);
console.log(b); // [1,2,4,5]
console.log(a); // [1,2,3,4,5] // 元はそのまま
JavaScriptまとめ(初心者が押さえるべき点)
- 末尾を消すなら
pop()、先頭を消すならshift()。どちらも削除した要素を返す。 - 末尾を一気に消すなら
length = N(全消しはlength = 0)。 - 中央の要素を消す/置き換えるなら
splice(start, count, ...)。 - 元配列を変えたくなければ
filterやsliceを使って新しい配列を作る。 - 操作によって内部で要素を詰めるコストが発生することがある(大量データで注意)。
