[英]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.