有没有办法干掉这段代码?

时间:2014-10-05 16:23:08

标签: javascript

我要做的就是随机化运行这些函数的顺序。我知道这是你可以循环的东西,我只是不确定如何。

randomRadio = Math.round(Math.random() * 4);
if (randomRadio === 4) {
    createRadios("d");
    createRadios("c");
    createRadios("b");
    createRadios("a");
} else if (randomRadio === 3) {
    createRadios("c");
    createRadios("a");
    createRadios("b");
    createRadios("d");
} else if (randomRadio === 2) {
    createRadios("a");
    createRadios("b");
    createRadios("c");
    createRadios("d");
} else {
    createRadios("b");
    createRadios("a");
    createRadios("c");
    createRadios("d");
}

2 个答案:

答案 0 :(得分:2)

我首先将可能的值放在数组中,然后继续删除数组的随机成员(并将其与函数一起使用),直到数组为空。

这不会将它限制在你上面选择的排列上,但它会使用所有这些排列。

var radio_to_create = [ 'a', 'b', 'c', 'd' ];
while(radio_to_create.length) {
    var index = Math.floor(Math.random() * radio_to_create.length);
    createRadios(radio_to_create.splice(index, 1)[0]);
}

答案 1 :(得分:0)

这相当于你的代码:

var radios = ["a", "b", "c", "d"];
randomRadio = Math.floor(Math.random() * radios.length);
radios.unshift(radios.splice(randomRadio, 1)[0]);

for (var i = 0; i < array.length; ++i)
    createRadios(radios[i]);

for (var x= 0; x < 20; ++x) {
  var radios = ["a", "b", "c", "d"];
  randomRadio = Math.floor(Math.random() * radios.length);
  radios.unshift(radios.splice(randomRadio, 1)[0]);
  
  document.getElementById("output").innerHTML += JSON.stringify(radios) + "\n";
}
<pre id="output"></pre>

splice从数组中删除项并返回已删除的项:因此radios.splice(randomRadio, 1)将返回一个数组,其中包含数组中的一个随机项,此项将不再位于原始数组中。< / p>

unshift只会在数组的开头添加此项目。


另一方面,如果您只是想对数组进行随机播放,请参阅Fisher-Yates shuffle