カテゴリ: JavaScript 更新日: 2025/10/08

JavaScriptのループ内で配列の要素を削除する方法を初心者向けに解説!

JavaScriptのループ内で配列の要素を削除する方法
JavaScriptのループ内で配列の要素を削除する方法

先生と生徒の会話形式で理解しよう

生徒

「JavaScriptのループの中で、配列の中身を削除したいときはどうすればいいですか?」

先生

「配列の要素を削除する方法はいくつかありますが、ループの中で削除するときには注意が必要です。順番や番号が変わるからです。」

生徒

「えっ、順番や番号が変わるってどういうことですか?くわしく教えてください!」

先生

「それでは、ループ内で配列の要素を削除する時のポイントをわかりやすく説明しますね。」

1. 配列の要素を削除する基本方法:spliceメソッドとは?

1. 配列の要素を削除する基本方法:spliceメソッドとは?
1. 配列の要素を削除する基本方法:spliceメソッドとは?

配列から特定の要素を取り除くには、JavaScriptのsplice(スプライス)メソッドを使います。

このメソッドは、配列の中の指定した場所から、指定した数だけ要素を削除できます。例えば、2番目(インデックス1)の要素を1つ削除するにはこう書きます。


const arr = ["りんご", "バナナ", "みかん"];
arr.splice(1, 1);  // 1番目から1つ削除
console.log(arr);  // ["りんご", "みかん"]

この例では、「バナナ」が削除されました。

2. ループ内で配列の要素を削除するときの問題点

2. ループ内で配列の要素を削除するときの問題点
2. ループ内で配列の要素を削除するときの問題点

ここで問題になるのが、配列の要素を削除しながらループを回すと、配列の長さや要素の位置が変わってしまうことです。

例えば、次のコードを見てください。


const fruits = ["りんご", "バナナ", "みかん", "バナナ"];
for (let i = 0; i < fruits.length; i++) {
  if (fruits[i] === "バナナ") {
    fruits.splice(i, 1);  // バナナを見つけたら削除
  }
}
console.log(fruits);

このコードを実行すると、予想と違う結果になります。


["りんご", "みかん", "バナナ"]

実は、ループの中で要素を削除すると、配列のインデックスがずれて、2個目の「バナナ」を見逃してしまったのです。

3. 削除しながらループするときの対策:後ろからループする

3. 削除しながらループするときの対策:後ろからループする
3. 削除しながらループするときの対策:後ろからループする

この問題を防ぐには、ループを後ろから前に向かって回す方法があります。

配列の最後の要素から順番に見ていくので、削除しても前の要素の位置が変わらず、すべての削除対象を正しく処理できます。


const fruits = ["りんご", "バナナ", "みかん", "バナナ"];
for (let i = fruits.length - 1; i >= 0; i--) {
  if (fruits[i] === "バナナ") {
    fruits.splice(i, 1);
  }
}
console.log(fruits);

["りんご", "みかん"]

これで、すべての「バナナ」が削除されました。

4. filterメソッドを使った配列の要素削除(ループ不要)

4. filterメソッドを使った配列の要素削除(ループ不要)
4. filterメソッドを使った配列の要素削除(ループ不要)

実は、配列の中から特定の条件に合わない要素を除く方法として、filterメソッドを使う手もあります。

filterは配列の中から条件に合う要素だけを集めて、新しい配列を作ります。


const fruits = ["りんご", "バナナ", "みかん", "バナナ"];
const filtered = fruits.filter(function(item) {
  return item !== "バナナ";  // バナナ以外だけ残す
});
console.log(filtered);

["りんご", "みかん"]

filterを使うと、ループ処理を書かずにスッキリしたコードになります。

5. spliceとfilterの違いを理解しよう

5. spliceとfilterの違いを理解しよう
5. spliceとfilterの違いを理解しよう

spliceは元の配列を書き換えるので、その場で要素を削除したいときに使います。

一方、filterは元の配列は変えず、新しい配列を作るので、元の配列を残したいときに便利です。

6. forEachループ内での削除は注意が必要

6. forEachループ内での削除は注意が必要
6. forEachループ内での削除は注意が必要

forEachメソッドを使ったループでも、配列の要素を削除することはできますが、内部でループ回数が固定されているため、削除してもループの動きは変わりません。

そのため、forEach内での配列削除はバグの原因になることが多いのでおすすめしません。

7. 実用例:ループで数値の配列から偶数だけ削除する方法

7. 実用例:ループで数値の配列から偶数だけ削除する方法
7. 実用例:ループで数値の配列から偶数だけ削除する方法

最後に、実際に数値の配列から偶数だけを削除するコード例を紹介します。後ろからループしてspliceで削除します。


const numbers = [1, 2, 3, 4, 5, 6];
for (let i = numbers.length - 1; i >= 0; i--) {
  if (numbers[i] % 2 === 0) {  // 偶数のとき
    numbers.splice(i, 1);
  }
}
console.log(numbers);

[1, 3, 5]

このように、ループ内で安全に配列の要素を削除できます。

8. ループ内での配列削除まとめ(まとめは書かないルールのためポイントだけ)

8. ループ内での配列削除まとめ(まとめは書かないルールのためポイントだけ)
8. ループ内での配列削除まとめ(まとめは書かないルールのためポイントだけ)
  • 配列の要素を削除するにはspliceメソッドを使う
  • ループ中に削除するとインデックスがずれるので、後ろからループする
  • 簡単に削除したい場合はfilterメソッドも使える
  • forEach内で削除は避けたほうが安全
関連記事:
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptとESNextの連携を完全ガイド!最新機能を使いこなす設定と対応法
New2
JavaScript
JavaScriptの正規表現で任意の1文字(.)や文字クラスを使う方法
New3
TypeScript
TypeScriptで非同期イテレーター(for await of)を活用する
New4
TypeScript
TypeScriptで「Hello World」を出力する手順と解説
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptの日時操作Tips!実務で役立つテクニック集
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.4
Java&Spring記事人気No4
TypeScript
TypeScriptでESLintとPrettierを導入!コード整形ルールを自動で統一する方法
No.5
Java&Spring記事人気No5
TypeScript
TypeScriptのif文の使い方を完全ガイド!初心者でもわかる条件分岐
No.6
Java&Spring記事人気No6
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの配列の要素にアクセスする方法(インデックス番号の使い方)
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptの正規表現で文字列を置換する方法(replaceメソッド)