【JS】JavaScriptで範囲を指定したランダムな数字を出力
こんにちは!今日はJavaScriptのMath.random()を用いた実用的なコードについて紹介します。
結論
●●以上●●以下のランダムな数を出力する関数はこう!
const rand = (from, to) => ~~(from + Math.random() * (to - from + 1))
rand(11, 13) // 11, 12, 13のどれか
数字逆にしてもいいバージョンはこう!
const rand = (from, to) =>
~~(Math.min(from, to) + Math.random() * (Math.abs(to - from) + 1))
rand(13, 11) // 11, 12, 13のどれか
Math.random()について
Math.random()は0以上1未満のランダムな数を返します。0は出る。1は出ない。
Math.random()
// 0.7343417844258269
よくやる例
0以上n未満
nかけると0以上n未満になります。よくやるやつ。
Math.random() * 10
// 9.138772947138971
切り捨て
~~ で切り捨て。これ↓だと0から9のどれかが出る。
~~(Math.random() * 10)
// 7
+1
10かけてるのに0から9までなのがミスの元なので1足す。
~~(Math.random() * 11)
// 10
n以上m以下
n以上m以下にするにはn足してからm-n+1をかける。
3以上5以下ならこう。
~~(3 + Math.random() * 3)
// 3
実用例
関数rand()を作ったわ。
**rand(【最小】, 【最大】)**みたいな使い方してね。
const rand = (from, to) => ~~(from + Math.random() * (to - from + 1))
rand(11, 13) // 11, 12, 13のどれか
おまけ
数字逆にしてもいいバージョン
**rand(【最大】, 【最小】)**とかにしてもエラーにならないやつはこう。
const rand = (from, to) =>
~~(Math.min(from, to) + Math.random() * (Math.abs(to - from) + 1))
rand(13, 11)
カリー化
こう。
const rand = from => to => ~~(from + Math.random() * (to - from + 1))
rand(11)(13)
カリー化+数字逆ok
const rand = from => to =>
~~(Math.min(from, to) + Math.random() * (Math.abs(to - from) + 1))
rand(13)(11)
カリー化+バッククォート
const rand = from => to =>
~~((from[0] | 0) + Math.random() * ((to[0] | 0) - (from[0] | 0) + 1))
rand`11``13`
カリー化+バッククォート+数字逆ok
const rand = from => to =>
~~(
Math.min(from[0] | 0, to[0] | 0) +
Math.random() * (Math.abs((to[0] | 0) - (from[0] | 0)) + 1)
)
rand`13``11`
引数がオブジェクト
const rand = ({ from, to }) => ~~(from + Math.random() * (to - from + 1))
rand({
from: 11,
to: 13,
})
引数がオブジェクト+数字逆ok
const rand = ({ from, to }) =>
~~(Math.min(from, to) + Math.random() * (Math.abs(to - from) + 1))
rand({
from: 11,
to: 13,
})
これ無限に書けるわ
結局
最初に書いたやつ使っとこう
おわり!
PREV
2019-10-06
【JS】JavaScriptのundefinedを短く書く(最短4文字)
NEXT
2020-04-29
ブログをNuxt.jsからHugoに移行し、さらにGatsby.jsに移行した話