使用Math.random()实现随机数的应用

// Math.random()会返回一个0~1之间的随机数,包含0不包含1,用区间表示则是[0, 1)
for (i = 0; i < 10; i++) {
    console.log('第' + i + '个随机数:' + Math.random());
}
// 第0个随机数:0.22490258245315387
// 第1个随机数:0.8061309070835714
// 第2个随机数:0.6288091350369744
// 第3个随机数:0.3977572971277936
// 第4个随机数:0.2984673423979354
// 第5个随机数:0.4947517323656667
// 第6个随机数:0.8637223168564752
// 第7个随机数:0.23646970057960193
// 第8个随机数:0.36865076412906705
// 第9个随机数:0.44227457974644646


/**
 * 生成一个随机整数
 *
 * @param int min 随机整数最小值(含)
 * @param int max 随机整数最大值(含)
 * @return int 随机整数
 */
function mt_rand(min, max) {
    const argc = arguments.length;

    if (argc === 0) {
        min = 0;
        max = 2147483647;
    } else if (argc === 1) {
        throw new Error('Warning: mt_rand() expects exactly 2 parameters, 1 given');
    } else {
        min = parseInt(min, 10);
        max = parseInt(max, 10);
    }

    return Math.floor(Math.random() * (max - min + 1)) + min;
}

for (i = 0; i < 10; i++) {
    console.log('第' + i + '个随机数:' + mt_rand(1, 10));
}
// 第0个随机数:1
// 第1个随机数:8
// 第2个随机数:4
// 第3个随机数:4
// 第4个随机数:10
// 第5个随机数:7
// 第6个随机数:5
// 第7个随机数:10
// 第8个随机数:6
// 第9个随机数:8


/**
 * 从数组中随机选出一个或多个元素
 *
 * @param array array 数组
 * @param int num 随机选出元素的数量
 * @return int|array 若数量为1个则返回数组键名,若数量为多个则返回数组键名的数组
 */
function array_rand(array, num) {
    const keys = Object.keys(array);

    if (typeof num === 'undefined' || num === null) {
        num = 1;
    } else {
        num = +num;
    }

    if (isNaN(num) || num < 1 || num > keys.length) {
        return null;
    }

    for (let i = keys.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));

        const tmp = keys[j];
        keys[j] = keys[i];
        keys[i] = tmp;
    }

    return num === 1 ? keys[0] : keys.slice(0, num);
}

var names = ['刘一', '陈二', '张三', '李四', '王五', '赵六', '孙七', '周八', '吴九', '郑十'];
for (i = 0; i < 10; i++) {
    console.log('第' + i + '个名字:' + names[array_rand(names, 1)]);
}
// 第0个名字:陈二
// 第1个名字:刘一
// 第2个名字:周八
// 第3个名字:周八
// 第4个名字:郑十
// 第5个名字:李四
// 第6个名字:孙七
// 第7个名字:张三
// 第8个名字:王五
// 第9个名字:刘一

Copyright © 2024 码农人生. All Rights Reserved