dポイントプレゼントキャンペーン実施中!

小粋空間: 商品リンクをランダムに切り替える
http://www.koikikukan.com/archives/2005/11/23-23 …

上記のエントリーを参考に、amazonの商品リンクをランダムで表示させようと試してみたのですが、上記の方法だと例えば商品をA~Eまで登録していたとしても、実際ランダム表示されるのはA~Eの中から1つだけになってしまいます。

これを、個数を指定してランダム表示されるようにしたい(3と指定したとすると、A~Eの中からランダムに3つ商品を表示、のように)のですが、その際、指定数は決め打ちせず、簡単に変えられるようにしておきたいのです。

「重複しない乱数を取り出す」等検索してみましたが、不勉強のため類似質問から応用できず…
知識のある方、ご教授いただけないでしょうか。
よろしくお願いいたします。

A 回答 (1件)

知識はないのに回答してしみませんが、いろいろ方法はあるのではないでしょうか?



全体が配列に入っているとして、とりあえず思いつくのは・・・

1)取り出したらマークをつけておく。
  乱数で呼び出すときにマークがないものが出るまで繰り返す。
2)最初に、シャッフルしておく。
  配列の引数回ループでまわして、適当に入れ替えを行う。
3)取り出したものをストックしておいて、新しいものを採用する前に
  それまでのものと比較して同じものがなければ採用する。
とか・・・
簡易的でよければこんなのでも、一応、ランダムになるのではないでしょうか?
全体の数と使用する数となどを考慮して効率の良い方法を決めればよいかと思います。

2)の例を以下に(リロードする度に、シャッフル後の順が変わります)
<html>
<body>
<script>
var m="最初:"; var a=[];
//最初は1~20をセット
for (var i=0; i<20; i++){a[i]=i+1; m+=" ," + a[i];}
//シャッフル
for (i=0; i<20; i++){
var n=Math.floor(Math.random() * 20);
if (i!=n) {var tmp=a[i];a[i]=a[n];a[n]=tmp;}
}
//結果を表示
m+="\n<p>混合:";
for (i=0; i<20; i++){m+=" ," + a[i];}
document.write(m);
</script>
</body>
</html>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
全く知識がなかったために、アドバイスいただいた内容もよく理解できない状態だったのですが、入門ページ等とにらめっこで何とか思い通りの挙動をさせることができました。
2)のやり方が一般的?なのかどうかわかりませんが、他の例文にも見られましたので、その方法をとることにしました。
これを機にjavascriptもがんばらなければと思います…
どうもありがとうございました。

お礼日時:2008/12/08 14:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!