4
A
回答
4
地图和集合不太适合随机访问。它们是有序的,它们的长度是已知的,但它们没有被索引以便通过订单索引访问。因此,要获取地图或集合中的第N个项目,您必须遍历它才能找到该项目。
从Set或Map中获取随机项目的简单方法是获取整个项目列表,然后选择一个随机项目。
// get random item from a Set
function getRandomItem(set) {
let items = Array.from(set);
return items[Math.floor(Math.random() * items.length)];
}
你可以做一个版本,将与既有集和这样的地图工作:
// returns random key from Set or Map
function getRandomKey(collection) {
let keys = Array.from(collection.keys());
return keys[Math.floor(Math.random() * keys.length)];
}
这显然不是东西会用大集或地图表现良好因为它必须迭代所有的键并构建一个临时数组以便选择一个随机数。
因为a地图和一套具有已知大小,你也可以选择在.size
财产纯粹基于随机索引,然后你可以通过地图迭代或设置直到你得到所需第N项。对于大集合来说,这可能会更快一些,并且会避免创建临时数组,但会牺牲一点代码的代价,但平均而言,它仍然会与集合的大小/ 2成比例。
// returns random key from Set or Map
function getRandomKey(collection) {
let index = Math.floor(Math.random() * collection.size);
let cntr = 0;
for (let key of collection.keys()) {
if (cntr++ === index) {
return key;
}
}
}
相关问题
- 1. 获得一个随机的项目从
- 2. 如何从列表中获得最多10个随机项目?
- 3. 如何获得在Maven项目从资源映射文件
- 4. 如何从飞镖的射程中获得一个随机数?
- 5. 随机映射div
- 6. 浅克隆一个ES6映射或设置
- 7. 斯卡拉多重映射:获得项目或其他空集
- 8. 如何获得AutoMapper映射?
- 9. 从数组中获得独特的随机项目
- 10. 随机“丢失类型映射配置或不支持的映射。” Automapper出错
- 11. Laravel:如何从目录中获得随机图像?
- 12. 如何检索和设置TFS项目的映射
- 13. BIRT如何设置/获取从项目
- 14. HandlebarsJS如何从JSON获得随机值
- 15. 如何分组查询并随机获得第n个项目
- 16. 从Json String获取随机项目
- 17. 从Firebase获取随机项目
- 18. 如何获得随机数
- 19. 如何从随机设置textview中获取文本?
- 20. Android随机设置选项
- 21. 从词典获取随机项目?不是随机的
- 22. 如何映射本地主机到项目目录
- 23. 从mysql获得随机值
- 24. 如何在映射器中设置值?
- 25. 如何随机设置ImageButton?
- 26. 如何正确扩展ES6映射
- 27. 如何从列表中获得项目
- 28. 在Verilog中随机映射位
- 29. 如何在类库项目中配置自动映射器?
- 30. 如何获得AutoMapper使用接口映射,具体映射
集合和贴图不适合这种随机访问(如果您不知道密钥)。你最终会迭代键或值。请参阅[this](http://stackoverflow.com/q/37822141/5459839)和[this](http://stackoverflow.com/q/30921283/5459839)。 – trincot