我有一个这样的数组:

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

我如何对其进行随机化/洗牌?

推荐答案

事实上的无偏洗牌算法是Fisher-Yates (aka Knuth) Shuffle.

您可以看到great visualization here(和原始帖子linked to this)

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);

更多信息about the algorithm已被使用.

Javascript相关问答推荐

我如何用对象对数组进行冒泡排序?

在 Javascript 中shuffle 嵌套数组

需要目录而不是 js 文件

EcmaScript 规范中 classScope 的目的是什么?

TSX 文件无法呈现导入的 React 组件

当我在 rxjs 的管道中遇到错误时如何执行“取消订阅”?

具有 6 个键的对象数组,如何将它们分组为更少的键?

overflow-anchor不适用于水平滚动

如何使用包含图像 url 的 JS 数组设置背景 html 正文的图像?

我可以将子元素的props 接口统一成一个父接口吗?

toString和数组join的时间复杂度差异

如何在使用 D3.js 放大时删除非整数刻度?

如何在 React Native 上的 Firebase 中获取特定文档的文档 ID?

未捕获的类型错误:无法读取未定义的属性(读取“url”)

React - TypeError:无法读取未定义的属性(读取“参数”)?

如何将通常位于数据库中的数据保存到 SharePoint 文件夹或网站的根文件夹

如何使用 Javascript 获取网站上按钮的输入?

Vue.js 3 v-if 三元函数,如何将对象作为条件传递

Javascript 递归函数柯里化和箭头函数

为什么浏览器在决定调用哪个 onclick 事件处理程序之前先应用 CSS 样式?