1. 使用sort方法
function randomArray(arr) {
// 使用sort方法
return arr.sort(() => Math.random() - .5)
}
console.log(randomArray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));
2. 使用下标随机法
实现思路:使用es6语法实现数组的深拷贝,使用while循环判断 数组的值是否为空,不为空则先生成0-当前数组长度的随机数,然后根据当前数组中的索引位置,删除当前的索引的值,改变原来数组的长度;使用splice方法后返回被删除的那个值,将这个值push到新的数组中,实现数组的乱序输出
function randomArray(arr){
let temp = [...arr]
let res = []
while(temp.length){
const index = Math.floor(Math.random()*temp.length)
res.push(temp.splice(index,1))
}
return res
}
3. Fisher–Yates shuffle洗牌
// 使用耶茨洗牌的方式
function shuffle(arr) {
for (let i = 0; i < arr.length; i++) {
// 从后往前遍历
let index = Math.floor(Math.random() * (arr.length - i)) + i;
// 从前往后
// let index = Math.floor(Math.random() * i);
[arr[index], arr[i]] = [arr[i], arr[index]]
}
return arr
}
console.log(shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));
4. 使用第三方库loadsh.js
_.shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])