見出し画像

【JavaScript】Math.random()関数

Math.random()
ランダムな数値を取得する関数。
使いみちが思いついたので勉強がてらnoteへ記載。

基本構文

Math.random()

// Math.random; Google chromeで実行した場合
// ƒ random() { [native code] }

基本構文を実行すると0以上、1未満の数値をランダムで1つ返す。

実践

// ランダムな数値(0以上、1未満)を呼び出す
console.log(Math.random());
-> 0.9434423040316109
-> 0.8997997952711219
-> 0.29447520005238403

// 引数maxへ入力した値までの数値をランダムで1つ表示
function getRandomInt(max) {
 return Math.floor(Math.random() * Math.floor(max));
}

// (Math.random() - Math.floor(max)); -> 引数に与えた数値が-に変換されて表示される
// + -> 引数に与えた数値がそのまま表示される

getRandomInt(6.5); //小数点以下は切り捨てられた
-> 4
-> 6
-> 0

ちなみにMath.floor() メソッドは、引数として与えた数以下の最大の整数を返す。

// min以上、max未満の乱数を返す関数
function getRandomArbitrary(min, max) {
 return Math.random() * (max - min) + min;
}

// この場合だと1と9は返ってこない
getRandomArbitrary(1, 9);
-> 4.732579412411795
getRandomArbitrary(1, 9);
-> 6.898142745086989
getRandomArbitrary(1, 9);
-> 6.327933391108177

ランダムレンズサイコロ

JavaScript で配列から重複なくランダムに複数の要素を取り出す方法
【HAM MEDIA MEMO(https://h2ham.net/)】様のサイトで発見。
初心者の私には、ほぼ解説できない…ありがとうございます。

function randomLens(array, num) {
let a = array;
let t = [];
let r = [];
let l = a.length;
let n = num < l ? num : l;
while (n-- > 0) {
  let i = Math.random() * l | 0;
  r[n] = t[i] || a[i];
  --l;
  t[i] = t[l] || a[l];
}
return r;
}

let test_array = 
[
"XF16mmF1.4",
"XF35mmF1.4", 
"XF56mmF1.2 APD", 
"XF90mmF2",  
"XF8-16mF2.8", 
"XF50-140mF2.8", 
];
randomLens(test_array, 5);

配列にFUJINONレンズの銘玉たちを代入して、持ち出すレンズを選ぶサイコロにしてみる。
Iinvoke結果は以下の通り。

randomLens(test_array, 5);
(5) ["XF8-16mF2.8", "XF50-140mF2.8", "XF16mmF1.4", "XF35mmF1.4", "XF56mmF1.2 APD"]

randomLens(test_array, 5);
(5) ["XF56mmF1.2 APD", "XF35mmF1.4", "XF8-16mF2.8", "XF50-140mF2.8", "XF16mmF1.4"]

randomLens(test_array, 5);
(5) ["XF50-140mF2.8", "XF90mmF2", "XF8-16mF2.8", "XF16mmF1.4", "XF35mmF1.4"]

randomLens(test_array, 5);
(5) ["XF56mmF1.2 APD", "XF35mmF1.4", "XF50-140mF2.8", "XF8-16mF2.8", "XF90mmF2"]

randomLens(test_array, 5);
(5) ["XF8-16mF2.8", "XF16mmF1.4", "XF90mmF2", "XF56mmF1.2 APD", "XF50-140mF2.8"]

…すごい…重複しない…!

新しいコードに出会ったら、とりあえずコンソール上で実行することを意識付けないと。

今日の学習BGM

まだ知らない日々に
僕に 君に
出会う旅に出よう!

毎日がこんな日々となるように。
引き続きがんばります。

まこと

この記事が気に入ったらサポートをしてみませんか?