function randomKey(obj) {
var ret;
var c = 0;
for (var key in obj)
if (Math.random() < 1/++c)
ret = key;
return ret;
}
有人可以解释这段代码如何从对象中选择一个随机密钥吗?
答案 0 :(得分:5)
假设obj
中有三个键。在循环的第一次迭代中,1/++c
将为1
,因此ret
将始终设置为第一个键。在第二次迭代中,1/++c
将等于0.5,因此生成的随机数将小于该概率的概率为1/2,因此将ret
更改为第二次的概率为50%键。在第三次迭代1/++c
将是0.333 ...,因此ret
将变为第三个键的概率为1/3。
对于obj
中的任何尺寸集合,您最终应该均匀分配密钥。