如何打乱一个数组

  • 方法一:新建个空数组,从原数组中随机截取一个元素插入空数组中,直到数组长度变为0
function random (arr) {
  let dp = [...arr]
  const result = []
  while (dp.length > 0) {
    let randomIndex = Math.floor(Math.random() * (dp.length))
    result.push(dp.splice(randomIndex, 1)[0])
  }
  return result
}
  • 方法二:利用数组的sort排序方法。每次调用Math.random生成的随机数去和0.5作比较,来实现元素位置的重新排序 

[0, 1, 2, 3, 4].sort(() => Math.random() > .5)
  • 方法三:倒序循环数组,将循环到的元素和随机选择的元素调换位置 

const arr = [0, 1, 2, 3, 4];
for (let i = 1; i < arr.length; i++) {
    // 随机数组下标,下标不超过数组长度
    const random = Math.floor(Math.random() * (i + 1))
    // 将循环到的数组元素和随机位置元素调换位置
    [arr[i], arr[random]] = [arr[random], arr[i]]
}

经其他地方大佬证实,方法三不需要另外一个变量,而且随机性更完善。

参考:https://www.zhihu.com/question/68330851

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值