【问题标题】:How can I sort an array randomly in javascript? [duplicate]如何在javascript中随机排序数组? [复制]
【发布时间】:2021-03-03 15:28:24
【问题描述】:

如何在 javascript 中对数组进行随机排序?

我试过这个:

array.sort(function(a, b){return Math.random()}); 

但它不起作用。

【问题讨论】:

  • 随机排序是什么意思?你的意思是Bogosort 还是随机随机播放?
  • 是的,我的意思是随机随机播放
  • 你可以试试this one

标签: javascript arrays sorting random


【解决方案1】:

首先,欢迎您使用 stackoverflow!
你可以看看这个问题:Sorting an Array in Random Order

您可以通过提供自定义比较功能以随机顺序对数组进行排序:

var points = [1, 2, 3, 4, 5];
points.sort(function(a, b){return 0.5 - Math.random()});

但上面的例子并不准确,它会偏爱一些数字而不是其他数字。

最流行的正确方法,是Fisher Yates shuffle:

var points = [40, 100, 1, 5, 25, 10];

for (i = points.length -1; i > 0; i--) {
  j = Math.floor(Math.random() * i)
  k = points[i]
  points[i] = points[j]
  points[j] = k
}

【讨论】:

  • “使用 Math.raondom 排序”不是很随机! 排序算法将尝试最小化交换并使用比较函数的过去结果。由于您只是提供了一个不稳定的比较功能,因此您会得到稍微随机的结果,但不是非常随机。
  • 我认为将 sort 与产生随机结果的 compareFunc 结合使用不是一个好主意。最好做类似points.map(p => ({ p, i: Math.random}).sort((a, b) => a.i - b.i).map(p => p.p);
  • 警告!不推荐使用该算法,因为它效率低且有很强的偏见;见 cmets。它留在这里供将来参考,因为这个想法并不罕见。
猜你喜欢
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 2022-01-17
  • 2010-12-21
  • 1970-01-01
  • 2012-12-11
相关资源
最近更新 更多