首页 > 解决方案 > 如何将日期转换为列表中的随机索引?

问题描述

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

我在变量中存储了日、月和年,但我能做些什么来将其转换为 0 和列表长度之间的整数?

谢谢!

标签: javascripthtmldaterandomindexing

解决方案


简单算法:

将 3 个整数与 1配对:

seed = pair(day, pair(month, year))

使用此 int 播种随机数生成器,以获得所需的随机性

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 (检查上面的“随机数生成器”链接):

randomOf(seed){
   Math.seedrandom(seed);
   return Math.random();
}

推荐阅读