2016-05-11 8 views
2

私はランダムな順序で4項目のjavascript配列を出力しようとしています。配列をランダムな順序で印刷しますか?

シーケンス::

ダイエットコーク

私はそれがに似た何かを印刷したい..but:

問題は、私はこれだけのように、ランダムに印刷するものを得ることができ、あります

シーケンス:

ダイエットコーク

擬コークス

なし、擬似コークス

コカコーラゼロ

順不同..in

、もちろん。

<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を使用して修正してみたいです。

+2

[フォローする手順は、 "シャッフル" と呼ばれている。](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) – Pointy

+0

@Pointy私がいることにGoogleに与えるでしょう。私はそれを調整しようとするまで、このスクリプトは動作していたのですが、今のところ動作していない理由はわかりません。 –

+0

なぜ 'PHP'にタグをつけますか? – Hassaan

答えて

0

悪いです。調整後:

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

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

ので、私は無作為化順序を交換し続けるません。

2

配列が空になるまでランダムインデックスで配列をスプライスすることができます。

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

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:値を表示します:

あなたは常に4回印刷されませんので、あなたは、あなたがすでに選択された値と衝突した後も iに1を追加
$.each(contents, function(index,value) { 
    document.getElementById('test1-drinks').append(value + "<br/>"); 
}); 

あなたの問題

  1. innerHTML =を使用して印刷するたびにデータを上書きします。あなたはappendを使って古いhtmlがそこにとどまることを許す必要があります。
+0

私は単一のループタスクのためにソートを使用しません。 –

+0

明らかに、ランダムな順序付けの作成は、より良い方法でパフォーマンスを向上させることができます。しかし、それは質問には関係ありません。 OPは、ランダムな順序付けを作成するためにどのような実装を使用したいのかを自分で決めることができますが、このような例はコンパクトさのために好きです。 – Glubus

+0

違反はありません。 –

関連する問題