一、背景需求
最近在开发音乐播放网站的时候,遇到“随机播放”的需求
需要知道的是,播放列表是以数组的形式存储的
当切换到“随机播放”时,我们需要对这个数组进行“洗牌”,任意地交换其中的元素
可以将这个功能封装在common目录下
二、具体实现(Javascript)
首先我们需要写一个 生成指定区间内的随机数 的函数
因为数组索引都是整数,所以我们需要对随机的结果再向下取整
// 返回一个(min,max]之间的随机数
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min)
}
Math.random( )会生成一个(0,1)之间的Number
然后我们需要遍历数组,对每个元素
令其与一个索引为随机数的元素进行交换
export function shuffle(arr) {
for (let i = 0; i < arr.length; i++) {
let j = getRandomInt(0, i)
let t = arr[i]
arr[i] = arr[j]
arr[j] = t
}
return arr
}
在js中,这样会直接修改arr指向的内存地址中的数组内容
如果需要保存原来的数组,可以对这个函数稍作修改
export function shuffle(arr) {
// 保存数组的副本,不直接对数组本身进行修改
let __arr = arr.slice()
for (let i = 0; i < __arr.length; i++) {
let j = getRandomInt(0, i)
let t = __arr[i]
__arr[i] = __arr[j]
__arr[j] = t
}
return __arr
}