▲TOPへ戻る

indexOfで配列内を検索し、ヒットしたものをspliceで配列から削除する方法

indexOf splice

やりたいこと

以下のように、 配列からひとつづつ、ランダムに表示し、表示されたものは 配列から削除していく 方法を紹介します。

配列のコピーを変数に格納

24行目 : slice を使うことで、元の配列が変更されてしまうことを防ぎます。 この1行がないと、以下、配列(data)からひとつづつ削除され、 リセットしたとき、最初の配列(data)が空になってしまいます。

const data = [
  {
    q: "問題1",
    a: "答え1"
  },
  {
    q: "問題2",
    a: "答え2"
  },
  {
    q: "問題3",
    a: "答え3"
  },
  {
    q: "問題4",
    a: "答え4"
  },
  {
    q: "問題5",
    a: "答え5"
  }
];

let currentQuestion = data.slice();

配列からランダムに一つ取り出す

配列からランダムに一つ取り出し、変数queに格納します。

const que = currentQuestion[Math.floor(Math.random() * currentQuestion.length)];

参考

js
【javascript】 ランダムな数を生成するMath.random()

indexOfで配列内を検索し、ヒットしたものをspliceで配列から削除

1行目 : indexOfで、 配列(currentQuestion)の中から、ランダムに選んだ要素( que )を検索します。 変数indexは配列内での(que )の位置(n番目)です。

2行目 : spliceで、配列(currentQuestion) のindex番目の要素を1つ削除するという意味。

const index = currentQuestion.indexOf(que);
currentQuestion.splice(index, 1);

参考

js
文字列や配列内を検索するindexOf() と lastIndexOf()の使い方
js
【javascript】 配列を削除、追加するarray.splice()メソッドについて

まとめ

  1. sliceで、配列のコピーをとる
  2. indexOfで, 配列内を検索し、ヒットしたものを spliceで配列から削除

こんな記事も読まれています。

profile

パソコン好きなガオ

コロナ禍によるステイホームを機にプログラミングを学ぶ。パソコンに関してはプロではないが、ちょっと詳しい程度。

パソコン

javascript

カメラ

ブログ