通过时间戳获取索引的一个有趣的算法题

一个数组,是个数字:var arr = [0, 1, 2,…8, 9],设计一个函数,要求三秒内调用次函数,返回的数字都是一个,如果两次调用间隔超过三秒,则返回不同的数字,不允许使用全局计数变量。

实现思路,通过时间戳分段来实现,3000毫秒一个段,arr.length为一个区间,比如:[0, 3000] (3000, 6000] (6000, 9000]…,获取当前时间戳,计算当前时间戳属于哪个区段,即可得出索引值,具体算法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

function getId(arr){
var t = new Date().getTime();
var index = parseInt(t/3000) % arr.length;
return arr[index];
}

// 合并成一行代码为:

function getId(arr){
return arr[parseInt(new Date().getTime()/3000)%arr.length];
}