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
}));
相关文章
|
3月前
|
Java
成随机数的几种方法、Math.random()随机数的生成、Random()的使用
这篇文章介绍了生成随机数的三种方法:使用`System.currentTimeMillis()`获取当前时间的毫秒值来生成0到100的随机整数、使用`Math.random()`生成[0,1)范围内的`double`类型随机数并扩大到指定范围、以及使用`Random`对象的`nextInt()`方法生成指定范围内的随机整数,并提供了相应的Java代码示例和测试结果。
成随机数的几种方法、Math.random()随机数的生成、Random()的使用
|
6月前
|
存储 算法 程序员
【C/C++ 随机数】深入探索C++随机数生成,random 模块的应用
【C/C++ 随机数】深入探索C++随机数生成,random 模块的应用
269 0
通过Math函数生成随机数
通过Math函数生成随机数
84 0
|
6月前
总结一些Math的常规用法,什么是math?
总结一些Math的常规用法,什么是math?
106 1
|
6月前
|
Java API
Java的Math.random获取区间随机数
Java的Math.random获取区间随机数
|
算法 JavaScript Java
Math.random()传参?什么是随机种子?什么是洗牌算法?
Math.random()传参?什么是随机种子?什么是洗牌算法?
188 1
|
算法 数据挖掘 Python
math与random的关系与作用
math与random的关系与作用
95 0
|
存储 C++
【C/C++】如何生成随机数?带你深入了解rand函数
【C/C++】如何生成随机数?带你深入了解rand函数
225 0
|
编译器 C语言 C++
C++中rand随机数的用法
C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)
Math和Random类常用方法
Math和Random类常用方法
101 0