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