zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    《大道至简:软件工程实践者的思想》读后感
    周学习进度总结(2019.7.14)
    周学习进度总结(2019.7.7)
    周学习进度总结(2019.8.13)
    周学习进度总结(2019.8.4)
    石家庄铁道大学2019 年秋季 2018级JAVA课堂测试试卷(一)
    周学习进度总结(2019.7.27)
    周学习进度总结(2019.8.25)
    周学习进度总结(2019.7.20)
    C#中判断是否为数字
  • 原文地址:https://www.cnblogs.com/hiuman/p/11225541.html
Copyright © 2011-2022 走看看