めぐの JavaScript 日記

あーもんど

配列の要素をランダムに選ぶ

配列 (Array) の中身をランダムに選びます。まずは復元抽出から。

復元抽出

ただ単に選ぶだけです。くじを引いてもとに戻すのと同じ。配列は変更されません。

コード

// 復元抽出
const randomChoice = arr => arr[Math.random() * arr.length | 0];

小数点以下の切り捨てにビット論理和 | を使っていますが, Math.floor() を使ってもかまいません。

使用例

let arr = [1, 2, 3, 4, 5];
console.log(randomChoice(arr));  // 1とか2とか3とか4とか5とか。実行毎に変わる。

たくさん抽出する

// 復元抽出を指定回数繰り返して配列で返す
const randomChoices = (arr, count) =>
    Array.from(Array(count), () => randomChoice(arr));


非復元抽出

選んだ要素を配列から弾きます。くじを引いてもとに戻さないのと同じです。

コード

// 非復元抽出
const randomSample = arr => arr.splice(Math.random() * arr.length | 0, 1)[0];

使用例

let arr = [1, 2, 3, 4, 5];
console.log(randomSample(arr));  // 1とか2とか3とか4とか5とか。実行毎に変わる。
console.log(arr.length);  // 4

たくさん抽出する

// 非復元抽出を指定回数繰り返して配列で返す
const randomSamples = (arr, count) =>
    Array.from(Array(count), () => randomSample(arr));


日記 (おまけ)

豆大福の豆抜きが食べたい。豆もちゃんと食べるけど。