google colabolatory⑨ JavaScriptでアルゴリズム(配列の要素をシャッフルする)

今回はこれがゴールです。

 

いくつか復習しておきます。

配列の宣言と代入についてです。

const array = [ ];  

で宣言できます。

array[0] = 1;

array[1] = 4;

array[2] = 7;

array[3] = 9;

これは、下記と同様です。

const array = [1, 4, 7, 9];

 

次に配列のコピーについてです。

配列をコピーしたい、すなわち、各要素の値は同じだが物理的に異なる配列を作りたい場合は、スプレッド構文を使って、

let b = [ ...a];  

のように作ります。

 

配列の要素をシャッフルするアルゴリズムは、Fisher-Yatesアルゴリズムです。

世界最速の配列シャッフルアルゴリズム、Fisher-Yatesアルゴリズム - Panda Noir

 

%%js

const array = ["apple", "orange", "banana", "peach"];

let arraySmp = [...array];

const shuffleArray = (arr) => {
  for(let i= arr.length-1; i>0; i--){
    let j= Math.floor(Math.random() * (i+1));
    let tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
  }
  return arr;
}

console.log(shuffleArray(arraySmp));

これは結局下記と同等です

const array = ["apple", "orange", "banana", "peach"];


let arraySmp = [...array];


const shuffleArray = (arr) => {
 for(let i=0; i<arr.length;i++){
 let j = Math.floor(Math.random() * i);
 let tmp = arr[i];
 arr[i] = arr[j];
  arr[j] = tmp;
 }
 return arr;
}


console.log(shuffleArray(arraySmp));

これで問題作成アプリの選択肢をランダムに入れ替えることができそうです。