簡體   English   中英

從迭代數組中獲取一些隨機元素

[英]Get some random element from an Array on Iteration

好的,這是我第一次在該社區尋求幫助,我將盡我所能。 這是我想要實現的。 我想從數組中給出4個鍵的列表,這些鍵顯然必須是唯一的。 我將以下內容置於for循環中,但我在下面的正確軌道上嗎

給定數組中的元素數組...

var keysRand = new Array("E","F","G", "A", "B", "C", "D", "F#", "G#", "A#", "D#", "C#")

我想遍歷數組,選擇一個隨機密鑰:

randno1 = keysRand[Math.floor( Math.random() * keysRand.length )];

獲取我選擇的鑰匙的索引

var a = keysRand.indexOf(randno1)

將其推到列表頂部並擺脫它。

keysRand.push(keysRand.splice(a, 1)[0]);
keysRand1.pop();

這似乎在大多數時間都有效,但是在執行console.log()時有時會看到未定義的條目。 我是在正確的軌道上,還是有更好的方法來解決這個問題?

您的問題是keysRand.splice(a, 1)實際上實際上是keysRand.splice(a, 1)刪除了該元素,因此不需要移動它並彈出它。

例如:

您在這里擁有什么:

keysRand.push(keysRand.splice(a, 1)[0]);
keysRand1.pop();

應該只是:

keysRand.splice(a, 1)

您已經有了帶有以下內容的索引: Math.floor( Math.random() * keysRand.length ) ,因此您的整個代碼可以簡化為:

var keysRand = new Array("E","F","G", "A", "B", "C", "D", "F#", "G#", "A#", "D#", "C#");
var index = Math.floor( Math.random() * keysRand.length );
keysRand.splice(index, 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM