跳至主要內容

JavaScript 生成随机数

星火燎原@vxhly大约 1 分钟designJavaScriptCode

前言

为 JS 中的 Math 对象新增生成不重复随机数方法。

方法源码一

/**
 * Math 对象的扩展方法,可用于生成随机数
 * @param  {number} startNum  起始数,整型
 * @param  {number} endNum    终止数,整型
 * @param  {number} count     生成的个数,整型
 * @param  {boolean} repeat   是否重复,true or false
 * @return {Array}            返回数组
 */
Math.randNum = function (startNum, endNum, count, repeat) {
  if (repeat) {
    var ret = new Array();
    for (var i = 0; i < count; i++) {
      // 生成区间范围内的随机数
      ret[i] = Math.floor(Math.random() * (endNum - startNum) + startNum);
    }
    return ret;
  } else {
    var tmp = new Array();
    for (var i = 0; ; i++) {
      if (tmp.length < count) {
        // 生成区间范围内的随机数
        var rand = Math.floor(Math.random() * (endNum - startNum) + startNum);
        for (var i = 0; i < tmp.length; i++) {
          if (tmp[i] == rand) {
            // 将生成的随机数进行比对,如果相同则重新生成
            return Math.randNum(startNum, endNum, count, repeat);
          }
        }
        // 向数组添加数据
        tmp.push(rand);
      } else {
        break;
      }
    }
    return tmp;
  }
};

如何调用

Math.randNum(number, number, number, true | false);

demo1

控制台代码

console.log(Math.randNum(3, 16, 5, true);)

输出 => [4, 15, 15, 15, 17]

demo2

控制台代码

console.log(Math.randNum(3, 16, 5, false);)

输出 => [15, 14, 6, 11, 4]

方法源码二

一种更简单的写法

var arr = new Array(); //新建一个数组

// 向数组赋值 0~100
for (var i = 0; i <= 100; i++) {
  arr.push(i);
}

// 随机排位
arr.sort(function () {
  return 0.5 - Math.random();
});

arr.length = 50; // 指定数组长度

document.write(arr); // 输出数组
打赏
给作者赏一杯咖啡吧
您的支持将是我继续更新下去的动力
微信微信
支付宝支付宝