'use strict';
const StringUtil = require('../string/StringUtil');
const ArrayUtil = require('../array/ArrayUtil');
/**
* @author ycx
* @description 随机数工具类
*/
class RandomUtil {
/**
* 获取随机范围的int数值 包含min 不包含max
* @param min {number} 最小数
* @param max {number} 最大数
* @return {number} 随机整数
*/
static randomInt(min, max) {
if (Number.isNaN(min)) {
min = 0;
}
if (Number.isNaN(min)) {
max = 0;
}
const number = Math.random();
const x = number * (max - min) + min;
return Math.floor(x);
}
/**
* 从指定字符串中随机获取字符串
* e.g. 'abcdefg'中获取长度为3随机字符串 ‘afg’;
* @param str {string}
* @param length {number} 随机字符串的长度
* @return {string|null} 字符串或null
*/
static randomStr(str, length) {
if (StringUtil.isEmpty(str)) {
return null;
}
let randStr = '';
for (let i = 0; i < length; i++) {
let strElement = str[this.randomInt(0, str.length)];
randStr += strElement;
}
return randStr;
}
/**
* 从前几个数组中随机获取 一个元素
* @param arr {Array<*>} 数组对象
* @param limit {number} 限制的前n项
* @return {*} 数组中的某个元素或者null
*/
static randomEle(arr, limit) {
if (ArrayUtil.isEmpty(arr)) {
return null;
}
if (limit >= arr.length) {
limit = arr.length;
}
return arr[this.randomInt(0, limit)];
}
/**
* 从A-Za-z0-9中获取指定长度的字符串
* @param length 长度
* @return {string} 字符串
*/
static randomEnStr(length) {
return this.randomStr(StringUtil.RandomStr, length);
}
}
module.exports = RandomUtil