以随机顺序打印数组?

时间:2016-05-11 14:20:18

标签: javascript jquery arrays random

我试图以随机顺序输出4个项目的javascript数组。问题是,我只能随机打印一个,如下所示:

  

序列:

     

健怡可乐

..但我想要打印类似的东西:

  

序列:

     

健怡可乐

     

Psuedo Coke

     

无伪食可乐

     零焦炭

..当然是随机顺序。

<div id="test1"></div>
<div id="test1-drinks"></div>

<script>

    var contents=new Array()
    contents[0]='Coke Zero'
    contents[1]='Diet Coke'
    contents[2]='Psuedo Coke'
    contents[3]='None-psuedo Coke'


    var i=0
    var random
    var spacing="<br>"
    while (i<contents.length){
        random=Math.floor(Math.random()*contents.length)
        document.getElementById('test1').innerHTML = "Sequence:<br>";
        if (contents[random]!="selected"){
            document.getElementById('test1-drinks').innerHTML = contents[random]+spacing;
            //mark element as selected
            contents[random]="selected"
            i++
        }
    }

</script>

我希望while循环可以为我提供,但它不是..任何帮助都很受欢迎,语言php,jQuery和JavaScript都非常受欢迎。

编辑:来自here的脚本,但我不想使用document.write来尝试修复它。

3 个答案:

答案 0 :(得分:2)

您可以使用随机索引拼接数组,直到数组为空。

&#13;
&#13;
var contents = ['Coke Zero', 'Diet Coke', 'Psuedo Coke', 'None-psuedo Coke'];

while (contents.length) {
    document.write(contents.splice(Math.floor(Math.random() * contents.length), 1) + '<br>');
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我的坏。调整:

document.getElementById('test1-drinks').innerHTML = contents[random]+spacing;

document.getElementById('test1-drinks').innerHTML += contents[random]+spacing;

所以我不会继续替换随机顺序。

答案 2 :(得分:0)

第1步: 定义你的数组:

var contents=new Array()
    contents[0]='Coke Zero'
    contents[1]='Diet Coke'
    contents[2]='Psuedo Coke'
    contents[3]='None-psuedo Coke'

第2步:随机排序数组:

contents.sort(function() {
  return .5 - Math.random();
});

第3步:打印值:

$.each(contents, function(index,value) {
    document.getElementById('test1-drinks').append(value + "<br/>");
});

您的问题

  1. 即使在与已选择的值发生碰撞后,您也会向i添加1,因此您不会总是打印4次。
  2. 每次使用innerHTML =打印时都会覆盖数据。你需要允许旧的html留在那里,使用append。