アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (5件)

<!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をクロスブラウザ対応に書き換えてください。
    • good
    • 0

<!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 のとき、むだですね。
    • good
    • 0

#2です



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

すでに回答が出ていますが…




そのまま文字列を作ってしまう考え。
頭が悪いので、単純にしている分古いブラウザでも動く(?)
(区切り文字に正規表現の演算子を指定しないように)

<!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>
    • good
    • 0

#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>
    • good
    • 0

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