如何随机化(洗牌)JavaScript 数组?

2024-05-26

我有一个像这样的数组:

var arr1 = ["a", "b", "c", "d"];

我怎样才能随机/洗牌它?


事实上的无偏洗牌算法是Fisher-Yates(又名 Knuth)洗牌 https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle.

你可以看到一个这里有很棒的可视化 http://bost.ocks.org/mike/shuffle/(以及原来的帖子链接到此 http://sedition.com/perl/javascript-fy.html)

function shuffle(array) {
  let currentIndex = array.length,  randomIndex;

  // While there remain elements to shuffle.
  while (currentIndex > 0) {

    // Pick a remaining element.
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex--;

    // And swap it with the current element.
    [array[currentIndex], array[randomIndex]] = [
      array[randomIndex], array[currentIndex]];
  }

  return array;
}

// Used like so
var arr = [2, 11, 37, 42];
shuffle(arr);
console.log(arr);

更多信息关于算法 http://en.wikipedia.org/wiki/Fisher-Yates_shuffle used.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何随机化(洗牌)JavaScript 数组? 的相关文章

随机推荐

  • Inno Setup:有条件地删除用户主文件夹中的非空目录

    我正在通过 Inno Setup 为我的 Windows 应用程序创建安装程序 应用程序本身将一些配置数据写入用户主文件夹及其自己的子目录中 现在 在卸载过程中 我希望允许用户选择一个选项来删除该文件夹 该文件夹最初不是由 Inno Set
  • Google PageSpeed Insights API 无法正常工作 [PHP]

    我是 PHP 的初学者 所以也许有人可以帮助解决这个问题 我的网络应用程序显示 Google PageInsights API 错误 这是代码 我尝试将版本更改为 v2 但仍然不起作用 public function getPageSpee
  • 如何识别远程参与者?

    我有一个远程参与者 客户端 它正在向另一个远程参与者 服务器 注册 然后注销 使用关闭挂钩 然而 虽然服务器接收到注销 但实际sender财产是一个不同的 Channel 对象 所以在我的服务器日志中我有 Registered new cl
  • WCF - 在服务中抛出故障异常的开销

    我发布了一个question https stackoverflow com questions 81306 wcf faults exceptions versus messages关于使用消息与故障异常在服务之间传达业务规则 我的印象是
  • xpath 根据子值选择父级

    我希望选择状态为 实时 的每个活动 我在 Drupal 的 XPath XML 解析器中使用它 并具有上下文基本查询和 xpath 查询字段 上下文 这是基本查询 所有其他查询都将在此上下文中运行 我目前有 语境 event status
  • swift 4 - HMCharacteristicTypeSerialNumber 已弃用

    我想阅读输入的配件信息HMAccessory 例如序列号 HMCharacteristicTypeSerialNumber 制造商 HMCharacteristicTypeManufacturer 模型 HMCharacteristicTy
  • 无法使用 R 中的 Quantmod 从雅虎财经下载数据

    我正在尝试使用以下代码从雅虎下载数据 library quantmod getSymbols WOW auto assign F 过去 这对我来说在任何场合都有效 除了现在 在我的小组作业到期前 5 天 但现在我收到此错误 Error in
  • 如何随机打乱向量中的元素

    我正在尝试完成一项需要发生以下情况的作业 请求所需的元素数量 n 用元素 0 1 2 n 1 填充向量并将其显示到控制台 随机打乱元素并将新的排列显示到控制台 我可以输入向量 但我不知道如何对向量进行洗牌 注意 我不能使用 random s
  • 为什么使用 ES6 Map 而不是普通的 javascript 对象?

    如果我们可以用普通的 javascript 对象创建键 值对 那么使用新的 ES6 的原因是什么Map https developer mozilla org en US docs Web JavaScript Reference Glob
  • 如何从 Linux 内核模块获取使用计数?

    我对正在开发的内核模块的使用计数有疑问 我想打印它以进行调试 如何从模块代码中获取它 有问题的内核版本 Linux 2 6 32 module refcount http lxr linux no linux v2 6 34 1 inclu
  • 如何让 Heroku 安装 devDependency?

    我希望 Heroku 在推送应用程序后构建我的应用程序 这样我就不必每次进行更改时都将构建文件夹向上推送 然而 Heroku 仅安装来自package json和 grunt 我的构建工具 及其所有组件都在devDependencies 我
  • shell中如何求数组的长度?

    shell中如何求数组的长度 例如 arr 1 2 3 4 5 我想得到它的长度 在本例中是 5 a 1 2 3 4 echo a 4
  • 如何在 vb.Net 中设置默认表单?

    如何将第四个表单设置为在 Visual Studio 2008 中按 f5 时将运行的默认表单 因为表单 1 始终是第一个启动的 在解决方案资源管理器中右键单击您的项目 选择属性 选择应用程序选项卡 从 启动表单 下的下拉列表中选择您的表单
  • 正则表达式与 ls 的用法

    我正在尝试使用 ER 扩展正则表达式 with ls like ls 我正在尝试打印包含扩展名的所有文件 我知道我可以用ls 但我想尝试使用 ER 当我运行该代码时 我收到此错误 ls No such file or directory 您
  • 如何使用 Tailwind CSS 更改输入范围滑块的颜色?

    祝您度过美好的一天 我目前正在尝试将一些颜色应用于简单的滑块范围
  • Elasticsearch 可搜索合成字段

    假设源文档 JSON 中存在几个名为的字段 a and b 属于类型long 我想构建一个综合字段 例如c 通过用下划线连接前面字段的值和 将其索引为keyword 也就是说 我正在研究一个可以通过如下虚构的部分映射来支持的功能 a typ
  • 如何使用批处理文件安装文件夹中的所有.exe?

    我正在尝试开发以下算法 对于当前文件夹 包含脚本的文件夹 中的所有文件 执行以下操作 将文件一一安装 cls setlocal disableDelayedExpansion if PROCESSOR ARCHITECTURE x86 se
  • python matplotlib 保存图形而不显示

    我想创建一个直方图并将其保存到文件中而不将其显示在屏幕上 我现在拥有的代码默认显示该图 我找不到任何方法来抑制显示该图 我也尝试过 pyplot hist nrs 也有同样的问题 import math time matplotlib py
  • 如何处理 SIGTERM

    Java 有没有办法处理收到的 SIGTERM 是的 您可以使用以下命令注册关闭挂钩Runtime addShutdownHook http java sun com javase 7 docs api java lang Runtime
  • 如何随机化(洗牌)JavaScript 数组?

    我有一个像这样的数组 var arr1 a b c d 我怎样才能随机 洗牌它 事实上的无偏洗牌算法是Fisher Yates 又名 Knuth 洗牌 https en wikipedia org wiki Fisher E2 80 93Y