数组乱序、随机排序、洗牌的方法
// 工具函数集-避免修改原始值
// 洗牌函数 source 是一个数组
export function shuffle(source) {
// 先复制一份避免直接修改source
const arr = source.slice()
for (let i = 0; i < arr.length; i++) {
const j = getRandomInt(i)
// 交换arr[i]和j的值 交换后会修改arr数组
swap(arr, i, j)
}
return arr
}
// 取0-max之间的值也会包含max
function getRandomInt(max) {
// Math.random() 0-1之间值 但不包含1
return Math.floor(Math.random() * (max + 1))
}
// 交换arr[i]和arr[j]的值
// 这个会修改arr数组
function swap(arr, i, j) {
const t = arr[i]
arr[i] = arr[j]
arr[j] = t
}
当创建这种工具函数的时候,一定要避免直接修改原始数组这种操作,有可能会造成误操作。
所以要在处理前先复制一下。