生成随机字符串

方法一:生成随机数转成 36 进制,再截取部分

36表示36进制(包含数字[10个]、字母[26个])

const randomStr = Math.random().toString(36).substring(2);

方法二:

console.log(this.randomStr(5));

/** 生成随机字符串
 * @param len 随机字符串长度,默认32位
 * @returns {string} 随机字符串
 */
randomStr(len = 32) {
  let t = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
  let val = "";
  for (let i = 0; i < len; i++) {
    val += t.charAt(Math.floor(Math.random() * t.length));
  }
  return val;
}

生成不重复的随机数

/** 生成不重复的随机数
 * @param {Object} extent.需要的随机数个数
 * @param {Object} range.随机数范围(从 0 ~ range-1 中随机选取)
 */
function createRandomNum(extent, range) {
  let randomArr = []; // 生成的随机数组
  while (randomArr.length < extent) {
    const num = Math.floor(Math.random() * range);
    if (randomArr.indexOf(num) === -1) randomArr.push(num);
  }
  console.log('randomArr', randomArr);
  console.log('未排序:' + randomArr.join(',') + '\n' + '已排序:' + randomArr.sort().join(','));
}

生成指定范围内的随机数(包含最大值和最小值)

/** 生成指定范围内的随机数(包含最大值和最小值)
 * @param {Object} min.范围内最小值
 * @param {Object} max.范围内最大值
 */
function assignRandomMinMaxInclude(min, max) {
  const range = max - min;
  const rand = Math.random();
  const num = min + Math.round(rand * range); // 四舍五入
  console.log(num);
}

生成指定范围内的随机数(包含最小值)

/** 生成指定范围内的随机数(包含最小值)
 * @param {Object} min.范围内最小值
 * @param {Object} max.范围内最大值
 */
function assignRandomMinInclude(min, max) {
  const range = max - min;
  const rand = Math.random();
  const num = min + Math.floor(rand * range); // 舍去
  console.log(num);
}

生成指定范围内的随机数(包含最大值)

/** 生成指定范围内的随机数(包含最大值)
 * @param {Object} min.范围内最小值
 * @param {Object} max.范围内最大值
 */
function assignRandomMaxInclude(min, max) {
  const range = max - min;
  const rand = Math.random();
  if (Math.round(rand * range) === 0) {
    return min + 1;
  }
  const num = min + Math.round(rand * range);
  console.log(num);
}

生成指定范围内的随机数(不包含范围值)

/** 生成指定范围内的随机数(不包含范围值)
 * @param {Object} min.范围内最小值
 * @param {Object} max.范围内最大值
 */
function assignRandomNotInclude(min, max) {
  const range = max - min;
  const rand = Math.random();
  let val = 0;
  if (Math.round(rand * range) === 0 || Math.round(rand * range) === 1) {
    val = min + 1;
  } else if (Math.round(rand * max) === max) {
    val = max - 1;
  } else {
    val = min + Math.round(rand * range) - 1;
  }
  console.log(val);
}

完整代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JS生成随机数</title>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
  </head>
  <body>
    <div style="margin-top: 30px">
      <button onclick="createRandomNum(20, 20)">生成不重复的随机数 [20位,0~19的随机数]</button>
      <div id="noRepeat" style="margin-top: 10px"></div>
    </div>
    <div style="margin-top: 30px">
      <button onclick="assignRandomMinMaxInclude(10, 19)">生成指定范围内的随机数(包含最大值和最小值) [范围值为10~19之内]</button>
      <div id="rangeValidator1" style="margin-top: 10px"></div>
    </div>
    <div style="margin-top: 30px">
      <button onclick="assignRandomMinInclude(10, 19)">生成指定范围内的随机数(包含最小值) [范围值为10~19之内]</button>
      <div id="rangeValidator2" style="margin-top: 10px"></div>
    </div>
    <div style="margin-top: 30px">
      <button onclick="assignRandomMaxInclude(10, 19)">生成指定范围内的随机数(包含最大值) [范围值为10~19之内]</button>
      <div id="rangeValidator3" style="margin-top: 10px"></div>
    </div>
    <div style="margin-top: 30px">
      <button onclick="assignRandomNotInclude(10, 19)">生成指定范围内的随机数(不包含范围值) [范围值为10~19之内]</button>
      <div id="rangeValidator4" style="margin-top: 10px"></div>
    </div>
    <script type="text/javascript">
      /** 生成不重复的随机数
       * @param {Object} extent.需要的随机数个数
       * @param {Object} range.随机数范围(从 0 ~ range-1 中随机选取)
       */
      function createRandomNum(extent, range) {
        let randomArr = []; // 生成的随机数组
        while (randomArr.length < extent) {
          const num = Math.floor(Math.random() * range);
          if (randomArr.indexOf(num) === -1) randomArr.push(num);
        }
        console.log('randomArr', randomArr);
        $('#noRepeat').html('未排序:' + randomArr.join(',') + '<br/>' + '已排序:' + randomArr.sort().join(','));
      }

      /** 生成指定范围内的随机数(包含最大值和最小值)
       * @param {Object} min.范围内最小值
       * @param {Object} max.范围内最大值
       */
      function assignRandomMinMaxInclude(min, max) {
        const range = max - min;
        const rand = Math.random();
        const num = min + Math.round(rand * range); // 四舍五入
        console.log(num);
        $('#rangeValidator1').html('随机值:' + num);
      }

      /** 生成指定范围内的随机数(包含最小值)
       * @param {Object} min.范围内最小值
       * @param {Object} max.范围内最大值
       */
      function assignRandomMinInclude(min, max) {
        const range = max - min;
        const rand = Math.random();
        const num = min + Math.floor(rand * range); // 舍去
        console.log(num);
        $('#rangeValidator2').html('随机值:' + num);
      }

      /** 生成指定范围内的随机数(包含最大值)
       * @param {Object} min.范围内最小值
       * @param {Object} max.范围内最大值
       */
      function assignRandomMaxInclude(min, max) {
        const range = max - min;
        const rand = Math.random();
        if (Math.round(rand * range) === 0) {
          return min + 1;
        }
        const num = min + Math.round(rand * range);
        console.log(num);
        $('#rangeValidator3').html('随机值:' + num);
      }

      /** 生成指定范围内的随机数(不包含范围值)
       * @param {Object} min.范围内最小值
       * @param {Object} max.范围内最大值
       */
      function assignRandomNotInclude(min, max) {
        const range = max - min;
        const rand = Math.random();
        let val = 0;
        if (Math.round(rand * range) === 0 || Math.round(rand * range) === 1) {
          val = min + 1;
        } else if (Math.round(rand * max) === max) {
          val = max - 1;
        } else {
          val = min + Math.round(rand * range) - 1;
        }
        console.log('val=', val);
        $('#rangeValidator4').html('随机值:' + val);
      }
    </script>
  </body>
</html>