灵魂拷问:数组乱序输出的方式你知道多少呢?
方式1:随机排序
随机抽取一个数,放进新数组中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function randomSortArray(arr) { let res = []; while (arr.length) { let index = parseInt(Math.random() * arr.length); res.push(arr[index]); arr.splice(index, 1); }; return res; }
const arr = [1,2,3,4,5,6,7,8,9] console.log(randomSortArray(arr))
|
方式2:sort
法
元素之间的位置交换取决于Math.random() - 0.5
的结果是大于0 小于0 还是等于0
1 2 3 4 5 6 7
| function randomSortArray(arr) { return arr.sort(() => Math.random() - 0.5); }
const arr = [1,2,3,4,5,6,7,8,9] console.log(randomSortArray(arr))
|
方式3:洗牌法
将数组中的索引值随机打乱,交换当前索引值和随机变化后的索引值互换
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function randomSortArray(arr) { for (let i = arr.length - 1; i >= 0; i--) { let randomIndex = Math.floor(Math.random() * (i+1)); [arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]]; } return arr; }
const arr = [1,2,3,4,5,6,7,8,9] console.log(randomSortArray(arr))
|