JavaScript 获取随机整数

Math.random()方法会返回介于 0(包含) ~ 1(不包含) 之间的一个随机数

 

假如想要拿到0-10之间的数,只需要将该方法的值*10 即Math.random()*10;

假如想要拿到0-20之间的数,同理,只需要将该方法的值*20  即Math.random()*20;

那么,想要拿到0-n之间的数,n是整十倍的数,即Math.random()*n。

 

想要拿到1-11之间的数呢?就是在0-10的基础上,加上1  即Math.random()*10+1;

即 想要拿到m-n+m之间的数,n是整十倍的数,即Math.random()*n+m。

 

拿到1-10之间的数呢?就是在0-9的基础上,加上1  即Math.random()*9+1;

即 想要拿到m-n之间的数,即Math.random()*(n-m)+m

 

此时,拿到的数值都是小数,而且都是大于m小于n的值。

舍掉小数点后的数值的方法有很多,如parseInt(),Math.ceil(),Math.floor(),Math.round()

如果使用parseInt()或Math.floor(),如在0-1之间,永远拿不到1的情况,不满足

如果使用Math.ceil(),如在0-1之间,除非拿到的值是0,否则都是拿到1的情况,虽然满足,但是概率不平均

使用Math.round()是最合适的,如在0-1之间,0.5及以上的值会返回1,0.5以下的值返回0。概率平均。

 

所以,拿到m-n之间的数,m不等于n,Math.round(Math.random()*(n-m)+m)

 

获取不重复的随机整数:(参数:随机数个数,最小值,最大值)

function randomArr(params) {
  params = { ...{ length: 5, min: 2, max: 32 }, ...params };
  let { length, min, max } = params;
  if (
    typeof length != "number" ||
    typeof min != "number" ||
    typeof max != "number" ||
    max <= min ||
    length <= 0
  ) {
    return [];
  }
  if(max - min < length) {
    length = max - min + 1;
  }
  let arr = [];
  for (let i = 0; i < length; i++) {
    let num = Math.round(Math.random() * (max - min)) + min;
    if (!arr.includes(num)) {
      arr.push(num);
    } else {
      i-=1
    }
  }
  return arr;
}
var result0 = randomArr();
console.log(result0); // [ 7, 15, 18, 16, 4 ]
var result1 = randomArr({});
console.log(result1); // [ 17, 24, 27, 25, 8 ]
var result2 = randomArr({ length: 3 });
console.log(result2); // [ 24, 4, 27 ]
var result3 = randomArr({ min: 0 });
console.log(result3); // [ 21, 11, 8, 18, 13 ]
var result4 = randomArr({ max: 20 });
console.log(result4); // [3, 7, 11, 15, 8]
var result5 = randomArr({ max: 4 });
console.log(result5); // [3, 4, 2]

 

posted @ 2019-07-22 14:13  hiuman  阅读(437)  评论(0编辑  收藏  举报