JavaScript | indexOf() と lastIndexOf() を「実際のアプリでどう使えるのか?」

JavaScript JavaScript
スポンサーリンク

では、indexOf()lastIndexOf() を「実際のアプリでどう使えるのか?」を、シンプルな TODO リスト例 でやさしく解説していきましょう。


目標

「同じタスクが二重登録されないようにする」や「特定のタスクを削除する」など、
実際のアプリ開発でよくあるケースで indexOf() がどう役立つかを体験します。


例:シンプルな TODO リスト(配列で管理)

let todos = ['買い物に行く', '宿題をする', '部屋を片付ける'];
JavaScript

これを操作して、

  • ✅ 新しいタスクを追加
  • 🗑️ 特定のタスクを削除
  • ⚠️ 重複登録を防ぐ

の3つを作っていきます。


1. 新しいタスクを追加する(重複チェック付き)

function addTask(task) {
  // すでに存在するかチェック(-1 なら存在しない)
  if (todos.indexOf(task) !== -1) {
    console.log('⚠️ そのタスクはすでに登録されています');
    return;
  }

  todos.push(task);
  console.log('✅ タスクを追加しました:', task);
}

addTask('ゴミを出す');
addTask('買い物に行く'); // ← 既にあるので追加されない
console.log(todos);
JavaScript

実行結果:

✅ タスクを追加しました: ゴミを出す
⚠️ そのタスクはすでに登録されています
['買い物に行く', '宿題をする', '部屋を片付ける', 'ゴミを出す']

🔍 ここでのポイント

  • indexOf(task) は配列の中に task があるかを調べる。
  • -1 なら「存在しない」。
  • !== -1 なら「存在する」。

これで同じタスクを二重登録するのを防げます


2. 特定のタスクを削除する

function deleteTask(task) {
  const index = todos.indexOf(task);

  if (index === -1) {
    console.log('⚠️ そのタスクは見つかりません');
    return;
  }

  // index の位置から 1 件削除
  todos.splice(index, 1);
  console.log('🗑️ タスクを削除しました:', task);
}

deleteTask('宿題をする');
deleteTask('ランニング'); // 存在しない
console.log(todos);
JavaScript

実行結果:

🗑️ タスクを削除しました: 宿題をする
⚠️ そのタスクは見つかりません
['買い物に行く', '部屋を片付ける', 'ゴミを出す']

🔍 ここでのポイント

  • indexOf() で「削除したい要素の位置」を探す。
  • splice(位置, 個数) で削除する。
  • 存在しない場合(-1)には削除しないように条件分岐。

3. 同じ内容のタスクが複数ある場合(lastIndexOf)

もし配列に同じ名前のタスクが複数ある場合
最後に登録したタスクを削除したいときは lastIndexOf() が便利です。

todos = ['掃除', '買い物', '掃除', '洗濯'];

function deleteLast(task) {
  const index = todos.lastIndexOf(task); // 最後に出た位置を取得

  if (index === -1) {
    console.log('⚠️ 見つかりません');
    return;
  }

  todos.splice(index, 1);
  console.log('🗑️ 最後の', task, 'を削除しました');
}

deleteLast('掃除');
console.log(todos);
JavaScript

実行結果:

🗑️ 最後の 掃除 を削除しました
['掃除', '買い物', '洗濯']

4. 実際のアプリUIとつなげるとこうなる(イメージ)

<input id="taskInput" placeholder="やることを入力">
<button onclick="addTaskFromInput()">追加</button>
<ul id="list"></ul>

<script>
let todos = [];

function addTaskFromInput() {
  const input = document.getElementById('taskInput');
  const task = input.value.trim();
  if (!task) return;

  if (todos.indexOf(task) !== -1) {
    alert('そのタスクはすでにあります!');
    return;
  }

  todos.push(task);
  render();
  input.value = '';
}

function render() {
  const list = document.getElementById('list');
  list.innerHTML = todos.map(t => `<li>${t}</li>`).join('');
}
</script>
JavaScript

✨ これをブラウザで開くと、
タスクを追加するたびに <ul> に表示され、
同じ内容を入れたときにはアラートが出ます。
まさに indexOf()データ重複チェックの中心で活躍しています。


まとめ

目的メソッド使い方のポイント
重複登録を防ぐindexOf()!== -1 で存在チェック
特定タスクを削除indexOf() + splice()見つからなければ何もしない
最後の重複を削除lastIndexOf()末尾から検索する

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