- 方法一:新建个空数组,从原数组中随机截取一个元素插入空数组中,直到数组长度变为0
function random (arr) {
let dp = [...arr]
const result = []
while (dp.length > 0) {
let randomIndex = Math.floor(Math.random() * (dp.length))
result.push(dp.splice(randomIndex, 1)[0])
}
return result
}
-
方法二:利用数组的sort排序方法。每次调用Math.random生成的随机数去和0.5作比较,来实现元素位置的重新排序
[0, 1, 2, 3, 4].sort(() => Math.random() > .5)
-
方法三:倒序循环数组,将循环到的元素和随机选择的元素调换位置
const arr = [0, 1, 2, 3, 4];
for (let i = 1; i < arr.length; i++) {
// 随机数组下标,下标不超过数组长度
const random = Math.floor(Math.random() * (i + 1))
// 将循环到的数组元素和随机位置元素调换位置
[arr[i], arr[random]] = [arr[random], arr[i]]
}
经其他地方大佬证实,方法三不需要另外一个变量,而且随机性更完善。