1、使用sort对数组进行排序,使用Math.random()来生成一个随机数,来和0.5进行比较。
代码如下所示:
function sortRandom(array) {
return array.sort((a, b) => Math.random() > 0.5 ? 1 : -1)
}
不过存在缺点:每一个元素被指派到的位置不是随机的,因为sort()函数是随机分配
的。
2、当原来的数组还存在的时候,使用Math.random()生成一个随机数,然后使用
Math.random() * arr.length向下取整,得到一个下标,然后将其放入另一个数
组中,从而实现打乱顺序。
function randomSort(arr) {
let result = []
while (arr.length) {
let index = Math.floor(Math.random() * arr.length)
result.push(arr[index])
arr.splice(index, 1)
}
return result
}
3、进行遍历循环数组中的每一项,然后将该项和后面的一项进行交换。
function randomSort(array) {
let length = array.length
let temp
let tempIndex
for(let i = 0; i < length; i++) {
tempIndex = Math.floor(Math.random() * (length - i)) + i
temp = array[i]
array[i] = array[tempIndex]
array[tempIndex] = temp
}
return array
}
4、将3中的方法使用es6语法进行重写。
function randomSort(array) {
let length = array.length;
// 不是数组或者数组长度小于等于1,直接返回
if (!Array.isArray(array) || length <= 1) return;
for (let index = 0; index < length - 1; index++) {
let randomIndex = Math.floor(Math.random() * (length - index)) + index;
[array[index], array[randomIndex]] = [array[randomIndex], array[index]];
}
return array;
}