欢迎来到我的博客文章!所有文章都是满满的前端干货,文章简明扼要。
从后往前遍历数组,每次将当前位置 i 与 [0, i] 范围内(包含自身)的一个随机位置 j 交换。
function fisherYatesShuffle(arr) {
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1)); // 0 到 i 的整数
[arr[i], arr[j]] = [arr[j], arr[i]]; // ES6 解构交换
}
return arr;
}
// 注意:不要用 arr.sort(() => Math.random() - 0.5)!
// 它的分布不均匀(见下方⚠️)