Open jiaoguanwen opened 5 years ago
打乱一个数组,有时候会有这种需求,比如歌曲列表的随机播放等,那么该如何打乱这个数组呢?
获取一个随机数的话,首先会想到Math对象的random方法,但是这个方法返回一个大于等于0小于1的浮点数,即值区间为[0, 1),但是作为数组下标的话,这个值应该是一个大于等于0的整数,所以我们需要处理一下,如下代码
Math
random
[0, 1)
function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min) }
这段代码能让我们拿到一个介于min和max之间的整数,这样的话,这个整数我们就能拿来获取一个随机的数组索引值。
min
max
打乱数组的话,如下代码
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 }
这段代码利用获取到的随机数,打乱数组。同时注意,打乱数组不应该修改原数组。
打乱一个数组,有时候会有这种需求,比如歌曲列表的随机播放等,那么该如何打乱这个数组呢?
获取一个合理范围的随机数
获取一个随机数的话,首先会想到
Math
对象的random
方法,但是这个方法返回一个大于等于0小于1的浮点数,即值区间为[0, 1)
,但是作为数组下标的话,这个值应该是一个大于等于0的整数,所以我们需要处理一下,如下代码这段代码能让我们拿到一个介于
min
和max
之间的整数,这样的话,这个整数我们就能拿来获取一个随机的数组索引值。打乱数组
打乱数组的话,如下代码
这段代码利用获取到的随机数,打乱数组。同时注意,打乱数组不应该修改原数组。