schedule2019-02-12

JavaScriptでランダムな配列を作成する

JavaScriptの配列の要素をシャッフル、またはランダムな値で生成する方法をまとめます。 ランダムな整数の配列を生成する方法もあります。

ランダムな値を持つ配列

Math.random()を使えばランダムな配列を作成できます。 Math.random()関数は、0–1(0以上、1未満)の範囲で浮動小数点の擬似乱数を返します。

範囲を数学記号で表わすと[0,1)[0, 1)です。

let array = [];
let length = 5; // 配列長

for (let i = 0; i < length; i++) {
  // 値が0から1までの
  array.push(Math.random());
}

console.log(array);
// [ 0.671522112170067, 0.3348344883249996, 0.888219131733891, 0.995131049343978, 0.6195171490437534 ]

ランダムな整数を持つ配列を作成する

続いて0から指定の整数までの配列を返します。 範囲は[0,max)[0, max)です。

// 0からmax-1までの整数を返す
function getRandomInt(max) {
  // ランダムな配列
  return Math.floor(Math.random() * Math.floor(max));
}

let array = [];
let max = 5; 
let length = 10
for (let i = 0; i < length; i++) {
  array.push(getRandomInt(max));
}

console.log(array);
// [ 3, 2, 0, 4, 1, 4, 1, 2, 2, 0 ]

Math.floor()は小数点以下を切り捨てて整数にします。 引数に少数を渡しても整数が返ってくるようになっています。

また、負の数を渡すと[max,0)[max, 0)の範囲で返ってきます。

// 0からmax-1までの整数を返す
function getRandomInt(max) {
  // ランダムな配列
  return Math.floor(Math.random() * Math.floor(max));
}

let array = [];
let max = -5; // 最大値をマイナスにした
let length = 10
for (let i = 0; i < length; i++) {
  array.push(getRandomInt(max));
}

console.log(array);
// [ -4, -3, -1, -2, -3, -2, -1, -5, -4, -5 ]

配列の要素をシャッフルする

続いて、配列の要素をシャッフルする方法です。 要素を順番にランダムな位置と交換しています。

// 配列をシャッフル
function shuffle(array) {
  for (let i = array.length - 1; i >= 0; i--) {
    let rand = Math.floor(Math.random() * (i + 1));
    // 配列の数値を入れ替える
    [array[i], array[rand]] = [array[rand], array[i]]
  }
  return array;
}


// 配列の初期化
array = new Array(0, 1, 2, 3, 4)

array = shuffle(array);
console.log(array);
// [ 0, 4, 1, 2, 3 ]

array = shuffle(array);
console.log(array);
// [ 3, 2, 1, 4, 0 ]

おわりに

以下のソートアルゴリズムのシミュレーションを作っていた際に、ランダムな配列が必要だったのでまとめました。 こちらもよければ見ていってください。