【问题标题】:Is there any easy way to shuffle a JavaScript array randomly but fixed to a given key? [duplicate]是否有任何简单的方法可以随机随机打乱 JavaScript 数组但固定到给定的键? [复制]
【发布时间】:2016-02-05 03:54:10
【问题描述】:

假设我有一个 JavaScript 数组:

var my_arr = [1,2,3,4,5,6];

洗牌的方法有很多,比如我已经有一个函数shuffle,像这样:

shuffle(my_arr);
// The array might be like [1,5,4,3,2,6];

但是当我再次运行它时,顺序就变了。我想知道随机播放是否可以固定为给定值(数字,字符串,甚至任何东西)。如果密钥是相同的密钥,我需要每次结果都相同。例如:

var my_arr = [1,2,3,4,5,6];
function shuffle_by_key(arr, key){....}
var new_arr1 = shuffle_by_key(my_arr, 1); 
var new_arr2 = shuffle_by_key(my_arr, 2);
var new_arr3 = shuffle_by_key(my_arr, 1);

new_arr1 应该与new_arr3 相同,因为它们是由相同的键“1”生成的。

【问题讨论】:

  • @Thilo 机会很酷,但我太重了,只是想知道为什么它甚至在打包的源文件中包含一些国家/人名。 chancejs.com/chance.min.js
  • 好吧,您所需要的只是一个可播种的随机数生成器和一个利用它的随机播放方法。 stackoverflow.com/questions/424292/…
  • 谢谢,为我提供了很好的信息。

标签: javascript arrays algorithm


【解决方案1】:
  1. 在 Javascript 中实现哈希(md5 或其他)函数
  2. 散列您的输入“盐”,因为对于给定的输入,散列应该始终相同,并产生伪随机数
  3. 使用哈希的输出来确定洗牌,可能通过使用每个 X 位来迭代剩余的索引并将它们删除到输出数组中
  4. 如果哈希数字用完,则根据需要重新哈希

【讨论】:

  • 你能否给出代码 sn-p 示例,说明如何执行你描述的 4 个步骤?
  • @mesqueeb 抱歉,刚刚看到这个。我现在不能,但这应该让你开始。第一步,实现一个哈希函数。这个链接应该有帮助:stackoverflow.com/a/7616484/4946681。第 2 步,您需要一个字符串来散列,因此请确保您的输入盐是一个字符串,然后在其上调用您的散列以获取一个整数(链接函数也返回负整数)。第三步,给定这个int,需要选择数组的第一个索引,所以模除。假设哈希为 49,数组长度为 6,49%6 为 1,所以新的第 0 个元素是旧的第 1 个元素。第 4 步,使用 49%6 或 49%5 作为下一个元素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 2015-12-27
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多