【问题标题】:Print array in random order?以随机顺序打印数组?
【发布时间】:2016-05-11 14:20:18
【问题描述】:

我正在尝试以随机顺序输出 4 个项目的 javascript 数组。问题是,我只能随机打印一张,像这样:

顺序:

健怡可乐

..但我希望它打印类似于:

顺序:

健怡可乐

假可乐

纯可乐

零可乐

..当然是随机顺序。

<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 习惯于我尝试修复它。

【问题讨论】:

  • @Pointy 我会给那个谷歌。问题是这个脚本一直在工作,直到我尝试调整它,但我不明白为什么它现在不起作用。
  • 为什么要标记PHP
  • @AlgernopK。无需谷歌 - 我的评论是维基百科页面的链接。
  • 我没有剩余任何标志。有人可以将此问题标记为stackoverflow.com/questions/6274339/… 的第 1000 个重复项吗?

标签: javascript jquery arrays random


【解决方案1】:

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

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>');
}

【讨论】:

    【解决方案2】:

    第 1 步: 定义你的数组:

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

    第二步:随机排列数组:

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

    第 3 步:打印值:

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

    您的问题

    1. 即使在与已选择的值发生冲突之后,您仍将 1 添加到 i,因此您不会总是打印 4 次。
    2. 每次打印时使用innerHTML = 覆盖数据。您需要使用 append 允许旧的 html 保留在那里。

    【讨论】:

    • 我不会对单个循环任务使用排序。
    • 显然,随机排序的创建可以在性能方面以更好的方式实现。但是,它与问题无关。 OP 可以为他/她自己决定他/她想要使用什么实现来创建随机排序,尽管我喜欢这种方法,因为它很紧凑。
    • 此外,除非您不是在谈论此解决方案的时间复杂度,否则排序一次比拼接 n 次的成本更低,因为单个拼接是 O(n) 复杂的,导致 @987654328 @complex 解决方案而不是 O(n log n) 复杂排序方法。没有冒犯!
    【解决方案3】:

    我的错。调整:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多