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()
有哪些安全上的问题?