高木のブログ

GAS(JavaScript)で配列からランダムで指定した数の要素を取り出す

2021/03/07

GASで配列からランダムにいくつか取り出したいという状況があり、調べてもこれが正解というものに出会えなかったので自分の中での結論をメモしておく
Rubyでいうsampleメソッドにあたるものを実現する

Rubyのsampleメソッド

items = ['Item1', 'Item2', 'Item3', 'Item4', 'Item5']
p items.sample(3)
#=> ["Item5", "Item4", "Item2"]

GAS(JavaScript)の場合

function myFunction() {
  const items = ['Item1', 'Item2', 'Item3', 'Item4', 'Item5'];
  Logger.log(sample(items, 3));
}

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

const sample = (array, num) => {
  return shuffle(array).slice(0, num);
}

実行ログ

20:47:06	お知らせ	実行開始
20:47:06	情報	[Item2, Item1, Item5]
20:47:06	情報	[Item3, Item4, Item2]
20:47:06	情報	[Item1, Item4, Item5]
20:47:06	情報	[Item3, Item2, Item1]
20:47:06	情報	[Item4, Item2, Item5]

参考


Written by ytkg, Twitter, GitHub

Pixela