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]
  • 相关阅读:
    3_数据类型
    2_十进制与二进制的互相转换
    1_初识Java
    Jedis 常用API
    Eazfuscator.net 2020 IL级指令虚拟化保护(Virtualization)机制分析
    C#实现——十大排序算法之选择排序
    Flutter 开发从 0 到 1(三)布局与 ListView
    使用 .NET 进行游戏开发
    Metasploit简单使用——后渗透阶段
    ElasticSearch 索引 VS MySQL 索引
  • 原文地址:https://www.cnblogs.com/hiuman/p/11225541.html
Copyright © 2011-2022 走看看