• 締切済み

Javascriptの質問です。

Javascriptの質問です。 10個の結果を格納する配列に、1から100の乱数を重複せずに格納し、 htmlの<p id="result">...</p>の...の部分にスラッシュ区切りで表示させるにはどうすればよいでしょうか?

みんなの回答

回答No.5

#2,3 です。 かきなおしました。ぜんかくくうはくは、はんかくに。 ぶらうざのしていがないので、じぶん きじゅんです。 しつもんがあるたびに、それようのぷろぐらむをかいていては、はんようせいがありませんね。 やりたいことができたのなら、そのきのうをめいかくにわけて、つくるべきです。 るーぷするところに、「正規表現」をつかうのは、・・・です。 らんだむにとりだすなら、すうちだけでなく、いろいろなものをとりだせるようにしたいものですね。 いったいいつから、「配列内包」とかつかえたんでしょうか?ひろまりませんね。 Array.map とか、Array.reduce もべんりなのに・・・ とてもざんねんです。 はいれつをきりだすしょりは、おそいかもしれませんが、いまのわたしは、こまりません。 だれに言ってんだ? <!DOCTYPE html> <title></title> <meta charset="UTF-8"> <body> <p id="result"></p> <script type="application/javascript; version=1.8"> function range (a, b) { while (a <= b) yield a++ }; function loop (n) { while (n) yield n-- } function randomGenerator (range) {  var copy = [];  var len;    while (true)   if (len = copy.length)    yield copy.splice (Math.random () * len |0, 1);   else    copy = range.slice (0); } var num = randomGenerator ([x for each (x in range (1, 100))]); var ary = [num.next () for each (x in loop (10))]; document.querySelector ('#result').textContent = ary.join ('/'); </script> </body>

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

すでに回答が出ていますが… そのまま文字列を作ってしまう考え。 頭が悪いので、単純にしている分古いブラウザでも動く(?) (区切り文字に正規表現の演算子を指定しないように) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head><title>sample</title> <meta http-equiv="Content-Script-Type" content="text/javascript"> </head> <body> <p id="result"></p> <script type="text/javascript"> document.getElementById("result").innerHTML = (function(max, n, sep){ var result = "", i = 0, val; var pre = "(^|"+sep+")", post = "("+sep+"|$)"; while(i<n){ val = Math.random() * max + 1 | 0; if(!result.match(new RegExp(pre + val + post)) && ++i) result += (result?sep:"") + val; } return result; })(100, 10, "/"); // 最大値、選択数、区切り文字 </script> </body> </html>

回答No.3

#2です まちがえた function fisherYates (a, b, c, d) a.concat (d.splice (Math.random () * (c + 1) |0, 1));

回答No.2

<!DOCTYPE html> <title></title> <meta charset="UTF-8"> <body> <p id="result"></p> <script type="application/javascript; version=1.8"> function fisherYates (a, b, c, d) a.concat (d[Math.random() * c |0]); function random (a) a.reduceRight (fisherYates, []); function range (a, b) { while (a <= b) yield a++ }; document.querySelector ('#result').textContent = random ([x for each (x in range (1, 100))]).slice (0, 9).join ('/'); </script> </body> ひとのことは とやかくいえませんが、 Array.filter より、Array.indexOf だと おもいます じぶんのことで、 fisherYates で、c == 0 のとき、むだですね。

回答No.1

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> <script> (function(){ var list = function(arr){ var num = 1 + Math.floor( Math.random() * 100 ); if(arr.length > 0) arr = arr.filter(function(v){ return (num != v) }); arr.push(num); if(arr.length < 10) return arguments.callee(arr); return arr; } window.addEventListener('load', function(){ document.getElementById('result').textContent = list([]).join('/'); }, false); </script> </head> <body> <p id="result"></p> </body> </html> ・配列の重複削除はもっと良いやり方や一般的なやりかたがあるのかも。 ・IEで動かすにはaddEventListenerとtextContentをクロスブラウザ対応に書き換えてください。

関連するQ&A