重複しないランダムな配列

シャッフルメソッドをどうしてもスッキリ理解できなくて頭を抱えたまま3日間。                  まずは自力でなんとかならないかと思い、達磨落としメソッドで作ってみました。

【達磨落としメソッド】

① 0~n番目までの配列を作る =【arry1】

② 目標となる空の配列を用意する = 【arry2】

*********ここからfor文で繰り返し*********

③ 【arry1】のどこから取り出すかをランダム(0~nまでの中で)に決める

④ 【arry1】からspliceした数字を【arry2】にpushする

⑤ 【arr1】の配列が一つ少なくなったので、n = n-1とする

**************************************

最終的には【arr1】は[ ]になり、【arry2】にはn個の重複しない配列が完成。

コードは以下です

// カラの配列を二つ用意する
const arry1 = [];
const arry2 = [];
// 作る配列の数を設定
let n = 10;

// 元になる配列をfor文で生成
const makeArry = () => {
  for (let i = 0; i < n; i++) {
    arry1.push(i);
  }
};
makeArry();

// 元になる配列からfor文でランダムに取り出して、
// 目標となる配列へ順番に入れる
const len = arry1.length;
for (let n = len; n > 0; n--) {
  const index = Math.floor(Math.random() * n);
  arry2.push(arry1[index]);
  arry1.splice(index, 1);
}

console.log(arry2);

コンソールログの結果

シャッフルメソッドをさらっと使えるようになると良いのですが、まだ腹落ちするまで時間がかかりそうです・・・。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA