Math.random()随机函数的一些常用封装方法

简介: Math.random()随机函数的一些常用封装方法
var random = {
    /**获取两个数之间的随机小数(fixed是有效数字位数)*/
    getDecimal(max, min, fixed=0) {
        return (Math.random() * (max - min) + min).toFixed(fixed);
    },
    /**获取两个数之间的随机整数*/
    getInteger(a, b) {
        return this.getDecimal(a, b, 1);
    },
    /**返回a到b且包含a和b的随机整数(其中a,b不能为负数)*/
    get(a, b) {
        return this.getInteger(a, b);
    },
    /**获取数组中的随机一个元素*/
    valueFromArray(arr) {
        if (arr && arr.length > 0) {
            return arr[random.get(arr.length - 1)];
        } else {
            return arr;
        }
    },
    /* 随机排序数组 */
    sortArray: arr => arr.sort(() => Math.random() - 0.5),
    /*获取数组中的随机多个元素组成的数组*/
    arrayFromArray(arr, data) {
        var tempArr = arr.concat();
        data.randomTotal || (data.randomTotal = 0);//0代表获取任意多个随机元素,>0代表获取randomTotal个随机元素
        data.startIndex || (data.startIndex = 0);//从数组开头随机的索引值
        data.startIndex < 0 && (data.startIndex = 0);
        data.endIndex || (data.endIndex = arr.length);//随机截止到尾部的索引值
        data.endIndex <= data.startIndex && (data.endIndex = data.startIndex + 1);
        data.endIndex > arr.length && (data.endIndex = arr.length);
        data.isContinue || (data.isContinue = false);//是否获取连续随机元素
        data.isRepeat || (data.isRepeat = false);//是否获取重复的元素
        if (data.isContinue) {
            var startIndex = data.randomTotal ? this.get(0, data.endIndex ? data.endIndex : tempArr.length - data.randomTotal) : this.get(0, tempArr.length);
            startIndex < data.startIndex && (startIndex = data.startIndex);
            var endIndex = data.randomTotal ? startIndex + data.randomTotal : this.get(startIndex, tempArr.length);
            endIndex > data.endIndex && (endIndex = data.endIndex);
            return tempArr.slice(startIndex, endIndex);
        } else {
            var newArr = [];
            for (var i = 0, len = data.randomTotal || tempArr.length; i < len; i++) {
                var randomIndex = this.get(data.startIndex > tempArr.length ? tempArr.length - 1 : data.startIndex, data.endIndex > tempArr.length - 1 ? tempArr.length - 1 : data.endIndex);
                newArr.push(tempArr[randomIndex]);
                data.isRepeat || tempArr.splice(randomIndex, 1);
            }
            return newArr;
        }
    }
};
//测试用例
console.log(random.arrayFromArray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], {
    randomTotal: 3,
    startIndex: 0,
    endIndex: 10,
    isContinue: true,
    isRepeat: false
}));
相关文章
|
2月前
|
存储 算法 程序员
【C/C++ 随机数】深入探索C++随机数生成,random 模块的应用
【C/C++ 随机数】深入探索C++随机数生成,random 模块的应用
110 0
|
12月前
通过Math函数生成随机数
通过Math函数生成随机数
66 0
|
2月前
|
Java API
Java的Math.random获取区间随机数
Java的Math.random获取区间随机数
|
10月前
Math方法的使用
Math方法的使用
31 0
|
11月前
|
算法 数据挖掘 Python
math与random的关系与作用
math与random的关系与作用
66 0
|
算法 JavaScript Java
Math.random()传参?什么是随机种子?什么是洗牌算法?
Math.random()传参?什么是随机种子?什么是洗牌算法?
156 1
|
JavaScript 前端开发
js: Math.random()获取随机数
js: Math.random()获取随机数
74 0
|
编译器 C语言 C++
C++中rand随机数的用法
C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)
Math和Random类常用方法
Math和Random类常用方法
84 0
Math.random()获取随机数
Math.random()获取随机数
123 0

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    27
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    26
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    27
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    28
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    24
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    31
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    22
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    20
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    21
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    19