BFE.devAI解答 - JavaScript 代码题
8. 手写shuffle()随机打乱一个数组
可以使用 Fisher-Yates 洗牌算法来实现 shuffle() 。
Fisher-Yates 算法每次随机选择一个元素,将其与数组的最后一个元素交换位置,然后再将倒数第二个元素随机选出一个与之交换位置,以此类推,直到数组被打乱。这种算法可以保证每个元素随机出现在任何位置的概率都是相等的。
具体实现如下:
function shuffle(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } return array;}
以上代码遍历数组,在每一次循环中,生成一个随机数 j,然后将第 i 个元素与第 j 个元素交换位置。最终返回打乱后的数组。