我试图随机选择一个随机属性从一个对象,我用字典作为快速索引。
请考虑以下代码:
var dict = {};
for(var i = 0; i < 10000; i++) {
var num = Math.random() * 1000000 << 0;
dict[num] = { Id: num };
}
const NUM_RUNS = 1000;
var start = new Date();
for(var i = 0; i < NUM_RUNS; i++)
getRandom(dict);
var end = new Date();
var runTime = (end.getTime() - start.getTime()) / 1000;
var timePerCall = (runTime / NUM_RUNS) * Math.pow(10,9);
console.log('Total Calls: ' + NUM_RUNS);
console.log('Total Runtime: ' + runTime + ' seconds');
console.log('Time Per Call: ' + timePerCall + ' nanoseconds');
function getRandom(dict) {
var keys = Object.keys(dict);
var index = keys[Math.random() * keys.length << 0];
return dict[index];
}
如你所见,使用
Object.keys()
是
非常
昂贵的,尤其是随着字典的增长。
我正在寻找一种最佳的方法来实现字典中元素的随机选择。当然,字典中有10000多个元素是一个极端的边缘情况,但是我还是希望能够处理它。