Javascript 如何将日期转换为列表中的随机索引?

Javascript 如何将日期转换为列表中的随机索引?,javascript,html,date,random,indexing,Javascript,Html,Date,Random,Indexing,我需要从列表中生成一个随机项,但该项每天都是随机的,并且对所有用户都是一致的。这是在一个网站上,因此使用JavaScript(虽然我只需要您遵循的算法,不一定需要代码本身) 我已经在变量中存储了日、月和年,但是我该如何将其转换为介于0和列表长度之间的整数呢 谢谢 你可以用这个。因此,我们的想法是将随机函数的种子更改为日期(可能只是月、日和年)。例如: Math.seedrandom('August 19, 1975'); console.log(Math.random()); // 0.8

我需要从列表中生成一个随机项,但该项每天都是随机的,并且对所有用户都是一致的。这是在一个网站上,因此使用JavaScript(虽然我只需要您遵循的算法,不一定需要代码本身)

我已经在变量中存储了日、月和年,但是我该如何将其转换为介于0和列表长度之间的整数呢

谢谢

你可以用这个。因此,我们的想法是将随机函数的种子更改为日期(可能只是月、日和年)。例如:

Math.seedrandom('August 19, 1975');
console.log(Math.random());    // 0.8213442237794714
console.log(Math.random());    // 0.9082914871756658
然后,要将其转换为整数,可以使用下面描述的函数:

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}
编辑:

然后,例如,使用它来获取数组中的某些内容


function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min; //The maximum is exclusive and the minimum is inclusive
}

let arr = ['firsEl', 'secondEl', 'thirdEl', 'fourthEl'];
let d = new Date(); //get todays date
let month = d.getMonth();
let day = d.getDate();
let year = d.getFullYear();
//make the random with seed
Math.seedrandom(`${month} ${day}, ${year}`);
//and finally using the function for int
let item = arr[getRandomInt(0, arr.length)]; 
console.log(item);
简单算法:

3个整数到1:

seed=pair(日、对(月、年))

使用此int为所需的随机性设定种子a

seed->[0,1,2,…,array.length-1]

index = Math.round(randomOf(seed) * (array.length - 1));
element = array[index]

下面是上述配对函数的基本javascript实现:

function pair(x, y) { return ((x + y) * (x + y + 1)) / 2 + y; }

实现randomOf(检查上面的“随机数生成器”链接):


没有解释如何从一个日期到数组的一个对应(但似乎是随机的)元素。这只是使用字符串日期(未提供)作为种子生成一系列数字。我添加了一个示例。好吧,哇,这是很多我不理解的东西。在JS中有没有简单的配对方法?它似乎没有一个数学函数。另外,我如何使用这个种子数字生成器?我如何将其纳入我的代码中?因此我理解并实现了前半部分-我有种子,使用代码笔今天的日期是2091584116531。这只是我不懂的第二点,使用JavaScript中实际上不存在的种子随机函数可以从David Bau那里获得。如果我是你,我会用你的种子int,用数组长度的模运算符,得到一个快速、简单、对IQ有意义的伪随机值,如果你放弃线程或者我想不出其他任何东西,这就是我的计划。你知道这个伪随机值有多伪吗?与我的做法不同相比,这是否值得注意?@哈利,不幸的是,我不知道。然而,除非你使用的是数百万长度的大规模阵列,否则这看起来应该是非常随机的。我将编辑我的答案,以包含有关随机播种的信息
randomOf(seed){
   Math.seedrandom(seed);
   return Math.random();
}