从Iteration上的Array获取一些随机元素

时间:2017-11-17 23:48:17

标签: javascript

好的,这是我第一次在这个社区寻求帮助,我会尝试尽可能具体。这就是我想要实现的目标。 我想给出一个列表中的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()时有时会看到未定义的条目。 我是在正确的轨道上,还是有更好的方法来解决这个问题?

1 个答案:

答案 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);