自己也模仿这做了一个可以返回一条或者多条的随机数据 [底部有使用方法的例子]

/* 
getMathBoolean : 随机布尔值
getMathNumber : 返回一个随机数 [返回一个默认0-1000的随机整数]
getMathColor : 返回16进制随机颜色值
getMathDate : 返回随机日期
getMathName : 随机名字
getMathChara : 返回单个文字 
getMathOneChara : 返回一句话
getMathChin : 返回随机多句话
 */
/* 
返回对象多条数据
arr : 数据格式
num : 数据条数
*/
function setMathData(arr, num) {
    let new_arr = arr ?? null;
    let new_num = num ?? 1;
    if (new_arr != null) {
        let arr_list = [];
        for (let i = 0; i < new_num; i++) { // 需求的长度
            let keys_list = Object.keys(new_arr);
            let value_list = Object.values(new_arr);
            let return_new_arr = {}
            for (let j = 0; j < keys_list.length; j++) {
if (Object.prototype.toString.call(value_list[j]) == "[object Object]") {
return_new_arr[keys_list[j]] = setMathData(value_list[j])
}else{
return_new_arr[keys_list[j]] = eval(value_list[j])
                   }
            }
            arr_list.push(return_new_arr)
        }
        return arr_list;
    }
}

/* -------------------------------------------------返回布尔值--------------------------------------------------------------------- */
// 返回布尔值 
function getMathBoolean(value) { // Number 返回true的概率  1-10 对应 10% - 100% 
    let Number = value ?? 5; // 默认值 true和false 出现的概率是相同的.
    if (Number) {
        let random = Math.floor(Math.random() * 10);
        if (random < Number || random == Number) {
            return true
        } else {
            return false
        }
    } else {
        return null;
    }
}
/* -------------------------------------------------返回随机数值--------------------------------------------------------------------- */
/*
min 最小值 
max 最大值 
decimal 小数位数 不传则返回整数 ;
minus  负数出现的概率 1-10 对应 10%-100% , 不传则返回正数
*/
// 返回随机整数或含有小数的数字
function getMathNumber(min, max, decimal, minusProbability) {
    max = max ??  1000;
    min = min ?? 0;
    decimal = decimal ?? null; // 默认位整数
    let minus = minusProbability ?? null; //默认是正整数
    let value = ""
    if (decimal) { // 返回含有小数
        value = (Math.random() * (max - min) + min).toFixed(decimal);
    } else { // 返回整数
        value = Math.floor(Math.random() * (max - min) + min);
    }
    if (minus) {
        if (Math.floor(Math.random() * 10) < minus) { // 负数的概率 
            return "-" + value;
        } else {
            return value;
        }
    } else {
        return value;
    }
}
/* -------------------------------------------------返回随机颜色值--------------------------------------------------------------------- */
// 通过需求返回需要的类型(颜色值)。二次封装 type可以选择的值有 rgb rgba hsl
function getMathColor(type) { // 默认16进制的
    if (type) {
        if (type == "rgb") { // rgb格式的
            return getRandomRgb();
        }
        if (type == "rgba") { //rgba格式的
            return getRandomRgba();
        }
        if (type == "hsl") { // hsl格式的
            return getRandomHsl();
        }
    } else { // 16进制的颜色值 
        return getRandomColor();
    }
}
/* 返回16进制的随机颜色 */
function getRandomColor() {
    let colorList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"]
    let color = "#"
    for (i = 0; i < 6; i++) {
        color = color + colorList[Math.floor(Math.random() * colorList.length)]
    }
    return color;
}
//  返回RGB格式的随机颜色
function getRandomRgb() {
    let rgb = "rbg(";
    for (let i = 0; i < 3; i++) {
        if (i == 2) {
            rgb = rgb + Math.floor(Math.random() * 255) + ")";
        } else {
            rgb = rgb + Math.floor(Math.random() * 255) + ",";
        }
    }
    return rgb;
}
//  返回RGB格式的随机颜色
function getRandomRgba() {
    let rgba = "rbga(";
    for (let i = 0; i < 3; i++) {
        if (i == 2) {
            rgba = rgba + Math.floor(Math.random() * 255) + ")";
        } else {
            rgba = rgba + Math.floor(Math.random() * 255) + ",";
        }
    }
    return rgba;
}
// hsl格式的随机颜色 
function getRandomHsl() {
    let hsl = "";
    let hue = Math.floor(Math.random() * 360); //色相
    let saturation = Math.floor(Math.random() * 100) + "%"; // 饱和度
    let lightness = Math.floor(Math.random() * 100) + "%"; // 亮度
    hsl = `${hsl}(${hue},${saturation},${lightness})`;
    return hsl;
}

/* -------------------------------------------------日期/时间--------------------------------------------------------------------- */
/* 
完整格式展示 :  "YYYY-MM-DD HH:SS:MM" 
type : 返回的格式 
dateSeparator : 日期分隔符
timeSeparator : 时间分隔符
isCurrent : 是否是当前时间 //默认获取随机当前时间
*/

function getMathDate(type, dateSeparator, timeSeparator, isCurrent) { // 缺少正则判断 
    let getType = type ?? "YYYY-MM-DD HH:SS:MM";
    let getD = dateSeparator ?? "-";
    let getT = timeSeparator ?? ":";
    let current = isCurrent ?? true;
    let date = new Date();
    let currentTime = { // 当前时间
        Y: date.getFullYear(),
        M: dateReplenish(date.getMonth() + 1),
        D: dateReplenish(date.getDate()),
        h: dateReplenish(date.getHours()),
        s: dateReplenish(date.getMinutes()),
        m: dateReplenish(date.getSeconds())
    }
    let randomTime = {
        Y: getMathNumber(1970, date.getFullYear()),
        M: getMathNumber(0, 12),
        D: getMathNumber(1, 31),
        h: dateReplenish(getMathNumber(0, 24)),
        s: dateReplenish(getMathNumber(0, 59)),
        m: dateReplenish(getMathNumber(0, 59))
    }
    let {
        Y,
        M,
        D,
        h,
        s,
        m
    } = current ? randomTime : currentTime
    if (getType == "YYYY-MM-DD") {
        return `${Y}${getD}${M}${getD}${D}`;
    }
    if (getType == "HH:SS:MM") {
        return `${h}${getT}${s}${getT}${m}`
    }
    if (getType == "YYYY-MM-DD HH:SS:MM") {
        return `${Y}${getD}${M}${getD}${D} ${h}${getT}${s}${getT}${m}`
    }
}

function dateReplenish(value) { // 日期小于两位数补充0;
    if (value < 10) {
        return "0" + value
    } else {
        return value
    }
}
/* 返回随机名字 */
function getMathName() {
    let nameList =
        "赵|钱|孙|李|周|吴|郑|王|冯|陈|楮|卫|蒋|沈|韩|杨|朱|秦|尤|许|何|吕|施|张|孔|曹|严|华|金|魏|陶|姜|戚|谢|邹|喻|柏|水|窦|章|云|苏|潘|葛|奚|范|彭|郎|鲁|韦|昌|马|苗|凤|花|方|俞|任|袁|柳|酆|鲍|史|唐|费|廉|岑|薛|雷|贺|倪|汤|滕|殷|罗|毕|郝|邬|安|常|乐|于|时|傅|皮|卞|齐|康|伍|余|元|卜|顾|孟|平|黄|和|穆|萧|尹|姚|邵|湛|汪|祁|毛|禹|狄|米|贝|明|臧|计|伏|成|戴|谈|宋|茅|庞|熊|纪|舒|屈|项|祝|董|梁|杜|阮|蓝|闽|席|季|麻|强|贾|路|娄|危|江|童|颜|郭|梅|盛|林|***|锺|徐|丘|骆|高|夏|蔡|田|樊|胡|凌|霍|虞|万|支|柯|昝|管|卢|莫|经|房|裘|缪|干|解|应|宗|丁|宣|贲|邓|郁|单|杭|洪|包|诸|左|石|崔|吉|钮|龚|程|嵇|邢|滑|裴|陆|荣|翁|荀|羊|於|惠|甄|麹|家|封|芮|羿|储|靳|汲|邴|糜|松|井|段|富|巫|乌|焦|巴|弓|牧|隗|山|谷|车|侯|宓|蓬|全|郗|班|仰|秋|仲|伊|宫|宁|仇|栾|暴|甘|斜|厉|戎|祖|武|符|刘|景|詹|束|龙|叶|幸|司|韶|郜|黎|蓟|薄|印|宿|白|怀|蒲|邰|从|鄂|索|咸|籍|赖|卓|蔺|屠|蒙|池|乔|阴|郁|胥|能|苍|双|闻|莘|党|翟|谭|贡|劳|逄|姬|申|扶|堵|冉|宰|郦|雍|郤|璩|桑|桂|濮|牛|寿|通|边|扈|燕|冀|郏|浦|尚|农|温|别|庄|晏|柴|瞿|阎|充|慕|连|茹|习|宦|艾|鱼|容|向|古|易|慎|戈|廖|庾|终|暨|居|衡|步|都|耿|满|弘|匡|国|文|寇|广|禄|阙|东|欧|殳|沃|利|蔚|越|夔|隆|师|巩|厍|聂|晁|勾|敖|融|冷|訾|辛|阚|那|简|饶|空|曾|毋|沙|乜|养|鞠|须|丰|巢|关|蒯|相|查|后|荆|红|游|竺|权|逑|盖|益|桓|公|万俟|司马|上官|欧阳|夏侯|诸葛|闻人|东方|赫连|皇甫|尉迟|公羊|澹台|公冶|宗政|濮阳|淳于|单于|太叔|申屠|公孙|仲孙|轩辕|令狐|锺离|宇文|长孙|慕容|鲜于|闾丘|司徒|司空|丌官|司寇|仉|督|子车|颛孙|端木|巫马|公西|漆雕|乐正|壤驷|公良|拓拔|夹谷|宰父|谷梁|晋|楚|阎|法|汝|鄢|涂|钦|段干|百里|东郭|南门|呼延|归|海|羊舌|微生|岳|帅|缑|亢|况|后|有|琴|梁丘|左丘|东门|西门|商|牟|佘|佴|伯|赏|南宫|墨|哈|谯|笪|年|爱|阳|佟|第五|言|福"
    nameList = nameList.split("|")
    let name = nameList[Math.floor(Math.random() * nameList.length)]
    var _rsl1 = "";
    var _rsl2 = "";
    var _randomUniCode1 = Math.floor(Math.random() * (40870 - 19968) + 19968).toString(16);
    var _randomUniCode2 = Math.floor(Math.random() * (40870 - 19968) + 19968).toString(16);
    eval("_rsl1=" + '"\\u' + _randomUniCode1 + '"');
    eval("_rsl2=" + '"\\u' + _randomUniCode2 + '"');
    if (Math.floor(Math.random() * 10) > 5) {
        return name + _rsl1 + _rsl2
    } else {
        return name + _rsl1
    }
}
/* 单个文字 */
function getMathChara() {
    var _rsl1 = "";
    var _randomUniCode1 = Math.floor(Math.random() * (40870 - 19968) + 19968).toString(16);
    eval("_rsl1=" + '"\\u' + _randomUniCode1 + '"');
    return _rsl1;
}
/* 返回一句话 */
/* 
 必须 getMathOneChara 传固定true  [结尾状态 结尾是句号 ,不是结尾是逗号]
 max 默认值20 
 min 默认值10  一句话
 */
function getMathOneChara(endingType, max, min) {
    let isgetMathOneChara = endingType ?? true;
    let setMax = max ?? 20;
    let setMin = min ?? 10;
    let length = Math.floor(Math.random() * (setMax - setMin) + setMin);
    let chara = ""
    for (let i = 0; i < length; i++) {
        chara = chara + getMathChara();
    }
    if (isgetMathOneChara) {
        chara = chara + ""
    } else {
        chara = chara + ""
    }
    return chara;
}
/* 随机多句话 /一句话[中文] 二次封装 */
/* 
OneChara false一句话/true多句话  
max 默认 7 
min 默认 3 多个
 */
function getMathChin(OneChara, max, min) {
    let CharaBoor = OneChara ?? true; // 默认只有一句话 ,否则随机3-7句话 
    let setMin = min ?? 3;
    let setMax = max ?? 7;
    let CharaLength = 1
    let chara = "";
    if (CharaBoor) { //多句话 
        CharaLength = Math.floor(Math.random() * (setMax - setMin) + setMin); //随机句子长度 ; 
        for (let i = 0; i < CharaLength; i++) {
            if (i == CharaLength - 1) {
                chara = chara + getMathOneChara(true);
            } else {
                chara = chara + getMathOneChara(false);
            }
        }
    } else { //一句话
        chara = chara + getMathOneChara(true);
    }
    return chara;
}
/* 随机单词 */
/* 
 initial  首字母是否大写 [true / false]
 max 单词最大长度 默认10 
 min 单词最短长度 默认3
 */
function getRandomWord(initial, max, min) {
    let setMax = max ?? 10;
    let setMin = max ?? 3;
    let setInitial = !initial ?? true; //默认首字母是大写的 
    let lowerCaseLetter = "qwertyuiopasdfghjklzxcvb";
    let capitalLetter = "QWERTYUIOPASDFGHJKLZXCVBNM";
    let lowerCase = lowerCaseLetter.split("");
    let capital = capitalLetter.split("");
    let randomWordNumher = Math.floor(Math.random() * (setMax - setMin) + setMin);
    let getWord = ""
    if (setInitial) { // 首字母大写 
        for (let i = 0; i < randomWordNumher; i++) {
            if (i == 0) {
                getWord = getWord + capital[Math.floor(Math.random() * capital.length)]
            } else {
                getWord = getWord + lowerCase[Math.floor(Math.random() * lowerCase.length)]
            }
        }
    } else { // 首字母不大写
        for (let i = 0; i < randomWordNumher; i++) {
            getWord = getWord + lowerCase[Math.floor(Math.random() * lowerCase.length)]
        }
    }
    return getWord;
}
/* 随机一句英文句子  */
/* 
 max 默认 7 
 min 默认 3 
 */
function getRandomEnglish(endingType, max, min) {
    let ending = endingType ? endingType : false;
    let setMax = max ? max : 7;
    let setMin = min ? min : 3;
    let paragraphNumber = Math.floor(Math.random() * (setMax - setMin) + setMin);
    let paragraph = ""
    for (let i = 0; i < paragraphNumber; i++) {
        if (i == 0) {
            paragraph = paragraph + getRandomWord(true) + " "
        } else if (i == paragraphNumber - 1) {
            if (ending) {
                paragraph = paragraph + getRandomWord(false) + "."
            } else {
                paragraph = paragraph + getRandomWord(false) + ","
            }
        } else {
            paragraph = paragraph + getRandomWord(false) + " "
        }
    }
    return paragraph;
}
/* 返回多句英文 */
/*   
endingType
 min 默认值 3 
 max 默认值 7
 */
function getRandomMultiEnglist(endingType, min, max) {
    let ending = endingType ? endingType : false
    let setMin = min ? min : 3;
    let setMax = max ? max : 7;
    let length = Math.floor(Math.random() * (setMax - setMin) + setMin)
    let paragraph = "";
    for (let i = 0; i < length; i++) {
        if (i == length - 1) {
            paragraph = paragraph + getRandomEnglish(true)
        } else {
            paragraph = paragraph + getRandomEnglish(false)
        }
    }
    return paragraph;
}

使用方法 [06 22 对设置多层数据进行调整]

let arr = {
		name: 'getMathName()',
		chack: 'getMathBoolean(1)',
		mathNumber: 'getMathNumber()',
		list : {
			title: 'getMathOneChara()',
			paragraph: 'getMathChin()',
			list2 : {
				mathcolor: 'getMathColor("rgb")',
				mathdate: 'getMathDate()',
			}
		}
	}
	let arrList = setMathData(arr,5) ; // 返回符合规范的多条数据 
	console.log(arrList)

  

 

posted @ 2022-03-29 21:30  小小潜力股i  阅读(55)  评论(0编辑  收藏  举报