jiaoguanwen / blogs

1 stars 0 forks source link

如何打乱一个数组? #1

Open jiaoguanwen opened 5 years ago

jiaoguanwen commented 5 years ago

打乱一个数组,有时候会有这种需求,比如歌曲列表的随机播放等,那么该如何打乱这个数组呢?

获取一个合理范围的随机数

获取一个随机数的话,首先会想到Math对象的random方法,但是这个方法返回一个大于等于0小于1的浮点数,即值区间为[0, 1),但是作为数组下标的话,这个值应该是一个大于等于0的整数,所以我们需要处理一下,如下代码

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min)
}

这段代码能让我们拿到一个介于minmax之间的整数,这样的话,这个整数我们就能拿来获取一个随机的数组索引值。

打乱数组

打乱数组的话,如下代码

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
}

这段代码利用获取到的随机数,打乱数组。同时注意,打乱数组不应该修改原数组。