跳到主要内容

random

2024年04月17日
柏拉文
越努力,越幸运

一、认识


Math.random() 函数返回一个浮点型伪随机数字,在0(包括0)和1(不包括)之间

二、语法


2.1 浮点数 [min,max)

function getRandom(min,max){
return Math.random()*(max-min)+min;
}
console.log(getRandom(3,9));

2.2 浮点数 [min,max]

2.3 整数 [min,max)

function getRandom(min,max){
return Math.floor(Math.random()*(max-min))+min
}
console.log(getRandom(2,4));

2.4 整数 [min,max]

function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min
}
console.log(getRandom(2,4));

三、场景


3.1 数组乱序

需求描述: 打乱原数组顺序

  • 方案一

    function shuffle(array) {
    for (let i = 0; i < array.length - 1; i++) {
    const index =
    Math.floor(Math.random() * (array.length - 1 - i + 1)) + i;
    [array[i], array[index]] = [array[index], array[i]];
    }
    return array;
    }
    let array = [1, 2, 3, 4, 5, 6];
    console.log(shuffle(array));
  • 方案二

    function shuffle(array){
    return array.sort(()=>Math.random()*0.5);
    }
    let array = [1, 2, 3, 4, 5, 6];
    console.log(shuffle(array));

3.2 获取 N 位随机数且不重复

function getRandom(array, n) {
const arr = [];
while (arr.length < n) {
const index =
Math.floor(Math.random() * (array.length - 1 - 0 + 1)) + 0;
arr.push(array.splice(index, 1)[0]);
}
return arr;
}
let array = [1, 2, 3];
console.log(getRandom(array, 3));

四、问题


  • Math.random() 有什么缺陷?

  • Math.random() 有哪些安全上的问题?

参考资料