Array shuffle 是一个很常用的算法,比如说扑克牌游戏的洗牌就用到了这个算法。lodash 就有 shuffle 的实现,本文尝试手动写一个 Array shuffle,希望对您有点启发。
一、代码实现
function shuffle(arr = [], n = 2) {
const result = [];
for (let i = 0; i < n; i++) {
const len = arr.length;
const index = Math.floor(Math.random() * len);
result.push(...arr.splice(index, 1));
}
return result;
}
function handleClick() {
const list = document.getElementById("numbers");
const arr = Array.from({ length: 9 }, (v, i) => i + 1);
list.innerHTML = shuffle(arr, 6)
.map((v) => `<li>${v}</li>`)
.join("\n");
}
handleClick();
- 参数
arr
可为任意数组,Array.from({ length: 9 }, (v, i) => i + 1);
可以生成 1 ~ 9 的数组,不用ES6的话可以用循环来实现 - 参数
n
为正整数,表示从参数arr
中取出几个元素 - 数组循环遍历时,
splice(index, 1)
方法会每次都删除已取出的元素并改变原数组,下一次循遍历的是新数组,从而保证取出的元素不重复
二、参看实例
访问Codepen查看代码及最终效果。
评论 (0)