美文网首页前端大杂烩
实现数组洗牌函数

实现数组洗牌函数

作者: lio_zero | 来源:发表于2022-05-13 20:46 被阅读0次

我们可能最常使用打乱数组顺序的方法是 Array.prototype.sort

const shuffle = (list) => list.sort((x, y) => Math.random() - 0.5)

但这种方法不是完全随机的。

我们可以使用 Fisher-Yates Shuffling 算法对数组进行随机排序。

原理:遍历数组元素,然后将当前元素与之后随机位置的元素进行交换。

function shuffle(arr) {
  let currentIndex = arr.length, randomIndex
  while (currentIndex) {
    randomIndex = Math.floor(Math.random() * currentIndex--)
    ;[arr[randomIndex], arr[currentIndex]] = [arr[currentIndex], arr[randomIndex]]
  }
  return arr
}

const list = [1, 2, 3, 4, 5, 6, 7, 8]
shuffle(list)

JS 有很多工具库使用到了这种算法,例如 Lodash 和 Underscore 的 _.shuffle(collection) 方法。

更多资料

相关文章

  • 实现数组洗牌函数

    我们可能最常使用打乱数组顺序的方法是 Array.prototype.sort: 但这种方法不是完全随机的。 我们...

  • 【十一】数组洗牌函数

    关于专题【vue开发音乐App】 如何优雅地将一个数组打乱?打乱意味着要随机、没有任何规律,就像洗牌那样,所以用M...

  • 一天一算法 - 基础排序

    准备 在实现排序算法之前,先介绍将用到的几个函数。比如说为了将数组中数字的顺序打乱,我们可能需要一个洗牌函数,为了...

  • 笔试题

    实现继承 防抖 节流 reduce实现map 二叉树遍历 数组去重 斐波那契数列 调度器 数组快排 洗牌算法 (打...

  • js经典算法记录

    随机数组洗牌 简单的日期字符串排序 递归实现数组扁平化 极简版数组扁平化 记录数组项重复次数 冒泡排序 快速排序(...

  • 关于webpack loader的加载顺序

    函数组合 先介绍一个概念,函数组合:函数组合是函数式编程中非常重要的思想,它的实现的思路也没有特别复杂。 函数组合...

  • compose

    函数组合 先介绍一个概念,函数组合:函数组合是函数式编程中非常重要的思想,它的实现的思路也没有特别复杂。 函数组合...

  • Py下对图节点洗牌的小程序

    NetworkX包中似乎没有现成的对图洗牌的函数 写一个。依赖于我实现的完全洗牌包 对图的洗牌就是改变图数据结构中...

  • js面试常见算法题

    数组去重 洗牌算法 写一个函数,统计字符串里出现出现频率最多的字符 冒泡排序

  • js数组

    数组 使用Array构造函数来实现数组var arr = new Array();//空数组var arr = n...

网友评论

    本文标题:实现数组洗牌函数

    本文链接:https://www.haomeiwen.com/subject/hgcdertx.html