追記※こちらに最新版アップしておきました。
(http://dev.remicck.net/archives/40)
最近バイトの業務内容が忙しいです。多分これが普通・・・?一緒に入る人によって作業量に違いがある気があるような気がします・・・。気のせいだと思いたいけど・x・
さて
暇な時間があったのでお勉強ってことで2チームにランダムに分けるWebアプリをjavascriptで作ってみました。配列をランダムに並び替えるところをぐぐって当てはめただけみたいになってますけどw
参考:http://www.softel.co.jp/blogs/tech/archives/2328
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>ランダムチーム分け</title>
<script src="js/jquery-1.7.1.min.js" type="text/javascript"></script>
</head>
<body>
<h1>チーム分けランダム君</h1>
<p>
ランダムに2チームを作ります<br />
分けたいメンバーを改行で区切りながら入力してください。
</p>
<textarea cols="40" rows="10" id="member"></textarea><br />
<button onclick="randomTeam()">仕分け!</button>
<h5>team1</h5>
<ol id="team1"></ol>
<h5>team2</h5>
<ol id="team2"></ol>
<!-- ランダムにチーム分けするプログラム -->
<script src="js/main.js" type="text/javascript"></script>
</body>
</html>
main.js
function randomTeam(){
// 初期化
$('#team1').empty();
$('#team2').empty();
// 文字列を取得して改行ごとに分ける
var value = $('#member').val().split(/\n/);
var user = new Array();
// 配列に格納する
for(var i = 0, length = value.length; i < length; i++){
if(value[i] != ''){ //改行が入っていた場合ココで取り除く。
user.push(value[i]); // 改行による空の要素が無い配列をuserとする
}
}
//乱数で重み付け
for (var i = 0, l = user.length; i < l; i++) {
user[i] = [user[i], Math.random()];
}
// ソート
user.sort(function(a, b){return a[1] - b[1];});
// 重み付けを取り除く
for (var i = 0, l = user.length; i < l; i++) {
user[i] = user[i][0];
}
// ここで配列内はランダムになっているので好きにもてあそぶこと。
for(var i = 0, length = user.length; i < length; i++){
if(i%2 != 1){ // チーム1に1人多く入るようにする。
$('#team1').append('<li>'+ user[i] +'</li>')
}else{
$('#team2').append('<li>'+ user[i] +'</li>')
}
}
}
※修正しました
配列入れるループ中に、空白だったら配列から削除、2個続いても大丈夫なようにデクリメントしておくようにと。これでバグとれたかな・・・!
なにやらシュワルツ変換っていうらしいですね?PHPさんだと配列をランダムに並び替える関数があるらしいんですけども。
とりあえずココにあっぷしてみました。
最低限のチーム分けが出来るだろう。3チームに分けるとかはなんとかなるだろう。
個人的には短い時間で作れたのがうれしくてアップしたのですw
明日が終われば・・・、ああ、まだちょっと忙しい。けど11日人狼だから頑張れる!
11日、参加される方々、よろしく!
では。
コメント