JavaScript | 配列から要素を削除する(pop, shift)

JavaScript JavaScript
スポンサーリンク

では「配列から要素を削除する方法」をプログラミング初心者向けにかみ砕いて、たっぷり実例付きで説明します。コードはそのままブラウザの開発者ツール(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]  // 元は変わらない
JavaScript

slice(部分を取り出して新しい配列にする)

  • 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 で先頭近くを削ると、残りを詰めるため要素数が多いと遅くなることがある(線形時間)。大量データを頻繁に先頭から削るならデータ構造を考えよう(例:リンクリストや二重キューなど)。
  • filterslice は新しい配列を作るのでメモリを多めに使う。

練習問題(手を動かして覚えよう) — 解答付き

問題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, ...)
  • 元配列を変えたくなければ filterslice を使って新しい配列を作る。
  • 操作によって内部で要素を詰めるコストが発生することがある(大量データで注意)。
タイトルとURLをコピーしました