1. 使用sort方法

  1. function randomArray(arr) {
  2. // 使用sort方法
  3. return arr.sort(() => Math.random() - .5)
  4. }
  5. console.log(randomArray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

2. 使用下标随机法

实现思路:使用es6语法实现数组的深拷贝,使用while循环判断 数组的值是否为空,不为空则先生成0-当前数组长度的随机数,然后根据当前数组中的索引位置,删除当前的索引的值,改变原来数组的长度;使用splice方法后返回被删除的那个值,将这个值push到新的数组中,实现数组的乱序输出

  1. function randomArray(arr){
  2. let temp = [...arr]
  3. let res = []
  4. while(temp.length){
  5. const index = Math.floor(Math.random()*temp.length)
  6. res.push(temp.splice(index,1))
  7. }
  8. return res
  9. }

3. Fisher–Yates shuffle洗牌

  1. // 使用耶茨洗牌的方式
  2. function shuffle(arr) {
  3. for (let i = 0; i < arr.length; i++) {
  4. // 从后往前遍历
  5. let index = Math.floor(Math.random() * (arr.length - i)) + i;
  6. // 从前往后
  7. // let index = Math.floor(Math.random() * i);
  8. [arr[index], arr[i]] = [arr[i], arr[index]]
  9. }
  10. return arr
  11. }
  12. console.log(shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

4. 使用第三方库loadsh.js

  1. _.shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])