C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 複数の文字列のランダムな並び替え


(過去ログ 19 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■8095 / inTopicNo.1)  複数の文字列のランダムな並び替え
  
□投稿者/ lima (4回)-(2007/09/23(Sun) 07:58:52)

分類:[JavaScript] 

2007/09/23(Sun) 08:20:10 編集(投稿者)

以前もお世話になりましたが、今回もよろしくおねがいいたします。

このたび、簡易の4択クイズを表示しようとおもっています。
JavaScript内に選択肢を格納して、順に表示させているのですが、選択肢の順番をばらばらに入れ替える方法を教えていただきたいのです。

   message = new Array();
   message[0] = '答え1:答え2:答え3:答え4';
   message[1] = '答え2:答え4:答え1:答え3';
   message[2] = '答え3:答え1:答え2:答え3';
   message[3] = '答え4:答え3:答え1:答え2';

上記を格納しています。そして表示部分は、

   var index = Math.floor(Math.random()*message.length);
   document.write(message[index].split(':')[0]);
   document.write(message[index].split(':')[1]);
   document.write(message[index].split(':')[2]);
   document.write(message[index].split(':')[3]);

としているのですが、これはどう考えても効率が悪くて、問題を作りにくくしているのです。
いちいち組み合わせの違う選択肢の並び方を用意せずとも、スクリプト側で入れ替えてくれる方法があれば、教えていただきたいのです。
よろしくお願いします。
引用返信 編集キー/
■8096 / inTopicNo.2)  Re[1]: 複数の文字列のランダムな並び替え
□投稿者/ かずき (7回)-(2007/09/23(Sun) 09:51:43)
かずき さんの Web サイト
JavaScriptは素人ですけど、こんな感じ?
http://www.3site.eu/jstests/jhp/ で動作確認しました。

function shuffle(list) {
  var i = list.length;

  while (--i) {
    var j = Math.floor(Math.random() * (i + 1));
    if (i == j) continue;
    var k = list[i];
    list[i] = list[j];
    list[j] = k;
  }

  return list;
}

message = ['答え1', '答え2', '答え3', '答え4'];
answer = shuffle(message)

for(index in answer) {
  document.write(answer[index]);
}

引用返信 編集キー/
■8098 / inTopicNo.3)  Re[2]: 複数の文字列のランダムな並び替え
□投稿者/ lima (5回)-(2007/09/23(Sun) 12:34:51)
No8096 (かずき さん) に返信
ありがとうございます!スッキリ動作してくれるようになりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -