• 締切済み

ランダムに複数のリンク、重複なし。

http://www.eweb-design.com/affiliate/0303_jr.html こちらのサイトのソースを参考にランダムに複数のリンクを表示したいと考えています。 このソースだとランダムに複数のリンクを表示できたのですが、重複しないように表示ができません。 そこでいくつか調べてみたところ、重複しないようにランダムに複数表示するスクリプトを発見しましたが、あまりシンプルに作成されていないため使用するのをやめました。 やはり、重複しないという条件をつけるとスクリプトは長くなってしまうのでしょうか? このスクリプトは諦めて他のスクリプトを試すべきなのでしょうか? JavaScriptに詳しい方、よろしくお願いします。

みんなの回答

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.3

<script> /**************************/ /*最初にシャッフルする方法*/ /**************************/ var list = [0,1,2,3,4,5,6,7,8,9]; //Fisher-Yates shuffle var i = list.length; while(i > 1){   var j = Math.floor(Math.random() * i);   i--;   var tmp=list[j]; list[j]=list[i]; list[i]=tmp; //Swap } alert(list.toString()); /*******************************/ /*1つずつランダムに取り出す方法*/ /*******************************/ function pick_random(list){   if(list.length<=0){return;}   //ランダムに1つ選ぶ   var idx = Math.floor(Math.random() * list.length);   var retVal = list[idx];   //選んだ要素を削除(splice使って削除してもよい)   list[idx] = list[list.length-1];   list.length--;   return retVal; } list = [0,1,2,3,4,5,6,7,8,9]; var shuffle_list = []; for(i=list.length;i>0;i--){   shuffle_list.push( pick_random(list) ); } alert(shuffle_list.toString()); </script> > var j=Math.floor(Math.random() * 20); > var tmp=h[j]; h[j]=h[i]; h[i]=tmp; この方法、実は要素数が3以上の時は全ての組み合わせが等確率で出現しません。 例えば要素数が3の時は、 4/27の確率で出現する組み合わせと、5/27の確率で出現する組み合わせが存在します。 //確認用コード <script> var dist = {}; for (var n=0;n<27000;n++){   var h=[0,1,2];   for (var i=0; i<3; i++){     var j=Math.floor(Math.random() * 3);     var tmp=h[j]; h[j]=h[i]; h[i]=tmp;   }   dist[h.toString()] = (dist[h.toString()]||0) + 1; } var message = ""; for(var pattern in dist){   message += pattern + ":" + dist[pattern] + "\n"; } alert(message); </script>

bug_get
質問者

お礼

解説付きのサンプルでありがたいです。 ですが、このサンプルを改良する技術を持っていないので、初心者サイトを参考に改良していきたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

かき混ぜるほうの一例 頭から必要な数だけ取り出せばよいです。 <html> <<script type="text/javascript"> var h=[]; for (var i=0; i<20; i++) h[i]=i+1; document.writeln('シャッフル前:' + h.toString()); for (i=0; i<20; i++){ var j=Math.floor(Math.random() * 20); var tmp=h[j]; h[j]=h[i]; h[i]=tmp; } document.writeln('<p>シャッフル後:' + h.toString()); </script> </html>

bug_get
質問者

お礼

具体的な例を出していただき、ありがとうございます。 数字のランダムとテキスト(リンク)のランダムでは書き方が異なるのでしょうか? 無知で申し訳ないです。

全文を見る
すると、全ての回答が全文表示されます。
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

その場合はリストから「引っこ抜く」(配列の内容が減っていく)方法か、リストをとりあえずかき混ぜてから必要な数だけ順番に取り出すってのが妥当じゃないかな。

bug_get
質問者

お礼

なるほど。 当方、JavaScriptの知識がないので、この回答と初心者サイトを参考にしながら頑張ってみようと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • バナー(javascript)をランダムで表示

    FC2ブログのプラグインにjavascriptを使ってバナー広告をランダムで表示しています。 今までは問題なかったのですが、新しくバナーを加えた際に、そのバナーがjavascriptで出来たものだったので、どうしてよいものかわからなくなってしまいました。 ランダム表示にはこちらのページを参考、というかコピーしました。 http://javascript.eweb-design.com/0616_ra.html 貼り付けたいバナーのソースです↓ ソースの改変は認められていません。 <!--- ---> <script type="text/javascript"><!--- ---></script> <script src='jsファイルのURL'></script> <noscript></noscript> <!--- ---> これ以外のバナーはgifとリンクで構成されていましたので特に問題ありませんでしたが、そこに上記のjavascriptバナーを加えてランダムに表示することはできますか? 自分で調べてみましたが、自力では見つけられなかったのでココで質問をする事にいたしました。 回答お願いします。

  • 同じjavascriptを2つ以上使うにはどうしたらいいのでしょう?

    http://www.eweb-design.com/affiliate/0303_jr.html ここで紹介されている、リンクをランダム表示するJavaScriptを使用してます。 上記のサイトのサンプルと同じものは出来たのですが ランダムリンクを2つ以上設置するにはどうすればいいのでしょうか 例えばブログの上部と下部に表示するようにです。 それと上部と下部では表示する内容を変えたいです 検索してみたり自分なりに試行錯誤してみたりしてみたのですが 知識がほとんどないので思うようにできません。 よろしくお願いします。

  • C#で複数の画像を重複なしでランダムに表示する方法

    C#で複数の画像を重複なしでランダムに表示する方法に困っています。 サンプルソースコードを書いていただけると助かります。

  • ランダムリンク(ランダム表示)の作成について

    初めて質問させていただきます。 自分のサイトにランダムリンク(ランダム表示)を設置しようと思いいろいろと調べてみたものの、 自分が必要としているものが見つかりませんでした。 以下が自分の希望するランダムリンクの形です。 (1)サイトのソース表示を見た場合、<a href="○○">××</a>のようなリンク形式で表示したい。 ⇒<script type ~></script> というふうに表示されないもの (2)テキストファイルなど、外部にリンク先のタグを挿入しておき、その中からランダムに表示されるようにしたい。 (3)phpで作成されたフリー配布されているものを使用させていただいたところ、うまく動かすことができませんでした。 ですので、php以外の形式のランダムリンクを希望いたします。 これらの条件にあてはまるランダムリンクの仕組み、サンプル、方法などをご存知の方はいらっしゃいませんでしょうか?? お手数ですが、よろしくお願いいたします。

    • 締切済み
    • CGI
  • 複数の外部jsをランダム表示させたい

    1つのhtmlの中で <script type="text/javascript" src="001.js"></script> <script type="text/javascript" src="002.js"></script> <script type="text/javascript" src="003.js"></script> といった複数のjsをランダムで表示させるコードや、サンプル掲載サイトを教えていただけませんか? 各jsの中身はテキストや画像などHTMLに表示されるものになっています。 よくあるランダムバナーやランダムリンクのjs版という感じです。 画像やテキストのランダムスクリプトを使って、呼び出される部分に当たるところを上記のようなjsに変えてみたりもしたのですが、IEやOperaではOKでしたがFirefoxではエラーになってしまったり、表示されなくなったりして上手くいきませんでした…;; よろしくお願いいたします。

  • ランダムバナーを別ウィンドウで開きたい

    以下のサイトに載っている方法で http://technique.eweb-design.com/0503_rbl.html バナー広告をランダム表示させるようにしましたが、 公告が表示されている同一のウィンドウ(親ウィンドウ)で 開いてしまいます。 自分はHTMLの知識しかない為、アンカーを target="_blank"を指定してみたのですが、 スクリプトエラーになってしまい失敗。 恐らくかんたんな質問になってしまうと思うのですが どなたか、ご指導お願いいたします。 あくまでJAVAScriptに拘ってます。

  • 画像リンクをランダムに4つ表示する

    このようなタグを使って、画像リンクのランダム表示を作成しました。 ((hard内)) <script type="text/javascript"><!-- // var imglist = [ [ "画像1", "", "リンク先1" ] , [ "画像2", "", "リンク先2" ] ]; function RandomImageLink() { // var selectnum = Math.floor(Math.random() * imglist.length); // var output = '<a href="' + imglist[selectnum][2] + '">' + '<img src="' + imglist[selectnum][0] + '"' + ' alt="' + imglist[selectnum][1] + '"><br>' + imglist[selectnum][1] + '</a>'; // document.write(output); } // --></script> ((body内)) <script type="text/javascript"><!-- RandomImageLink(); // --></script> こうしてランダムに表示できるようになったのですが、私は『ランダムに1つ表示』ではなく、『ランダムに4つ表示』にしたいのです。 …どうすればいいのでしょうか? どなたか回答をお願いします。

  • 画像からランダムリンク

    Javascriptでランダムリンクをする場合、 <form> <input type=button onClick="jump()" value="ランダム"> </form> <script> url = new Array(); url[0] = "00.html"; url[1] = "01.html"; url[2] = "02.html"; function jump() { p = Math.round(Math.random() * (url.length - 1)); parent.top.document.location = url[p]; } </script> という記述を使うのは知っているんですが、 「ランダムリンク」というボタンではなく、 画像をクリックしてランダムリンクさせることは可能でしょうか? Javascriptでは無理な場合、 画像からランダムリンクを張る方法はありますか? CGI等でも構いませんので、お勧めがあれば教えてください。

  • リンクをランダムに変えたい

    画像ランダムスクリプトと同じような感じでリンクをランダムに変えることは可能でしょうか? つまりリンク先をいくつか用意しておいた上でページを表示するたびにテキスト上のリンク先を変化させたいのです。 ご教授よろしくお願い致します。

  • ランダム表示かつ重複しない

    現在flashでクイズを作っています。 一回スタートさせれば問題はランダムに5問でます。 正解し続ければ5問でクリア。 間違えれば終了です。 そこでクイズに使う背景をランダム表示かつ、重複しないものにしたいと思っていますがうまくいきません。 dummy_mcを作ってそこに 現在背景用の1~10swfファイルをランダム表示させています。 ただこれだと同じ背景が続けてでてきたりしてしまいます。 これを一回のゲームで背景が重複しないで表示させたいと思っています。 アニメーション、フレーム移動などは理解していますが scriptになると正直わからないことだらけです。 現在勉強中でscriptはコピペしながら改造している状態です。 解決法をわかるかたがいらっしゃったらよろしくお願い致します。