Fisher–Yates shuffle
- 著名的洗牌算法:原理就是遍历数组元素,将当前元素与随机抽取的一个剩余元素进行交换
function shuffle(arr) {
let newArr = [];
for (let i = 0, len = arr.length; i < len; i++) {
<!-- 随机抽取arr剩余元素中的某个值,下标为rIndex -->
let rIndex = Math.floor(Math.random() * (len - i));
<!-- 将抽取的值赋值给新数组 -->
newArr[i] = arr[rIndex];
<!-- 删除arr中抽取的项,保证每次都是从剩余元素中抽取,不重复 -->
arr.splice(rIndex, 1);
}
<!-- 返回乱序后的数组 -->
return newArr;
}
let arr = [1, 2, 3, 4, 5, 6];
console.log(shuffle(arr));