Array shuffle算法

Flying
2019-07-04 / 0 评论 / 0 阅读 / 正在检测是否收录...

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

评论 (0)

取消