好的,这是我第一次在这个社区寻求帮助,我会尝试尽可能具体。这就是我想要实现的目标。
我想给出一个列表中的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 )];
获取我选择的Key的索引
var a = keysRand.indexOf(randno1)
将其推到列表顶部并摆脱它。
keysRand.push(keysRand.splice(a, 1)[0]);
keysRand1.pop();
这似乎在大部分时间都有效,但是在执行console.log()
时有时会看到未定义的条目。
我是在正确的轨道上,还是有更好的方法来解决这个问题?
答案 0 :(得分:0)
你的问题是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);