何をしているか
ランダムで担当者を決めることができる抽選機能をGASで実装中です。
スプレッドシート上に以下のようにメンバーの情報を並べており(合計6名)
A列 テスト一郎 テスト二郎 テスト三郎 テスト四郎 テスト五郎 テスト六郎
ランダムな乱数配列を作成するところまでは成功したので、
トリガー(月〜金の時間指定)で実行する際に以下のようにランダムな乱数配列が作成できます。
1回目... [1.0, 2.0, 5.0, 6.0, 4.0, 3.0] 2回目... [6.0, 1.0, 3.0, 6.0, 5.0, 2.0]
この作成された乱数配列の先頭を使用し、メンバーの名前を取得して
現在のコードに記載の通りmessageをpostしているのですが
これだと作成される乱数配列は以下のような場合もあり重複してしまうことがあります。
// 1.0が被ってしまうのでテスト一郎が2連続担当者となる 1回目... [1.0, 2.0, 5.0, 6.0, 4.0, 3.0] 2回目... [1.0, 6.0, 3.0, 4.0, 5.0, 2.0]
現状のコード
現状のコード
(こちらを参考にさせていただきました。参考URL:https://pisuke-code.com/js-create-non-overlap-randoms/)
*スプシの取得などは除く
... /** 重複チェック用配列 */ var randoms = []; /** 最小値と最大値 */ var min = 1, max = 6; /** min以上max以下の整数値の乱数を返す */ function intRandom(min, max){ return Math.floor(Math.random() * (max - min + 1)) + min; } function TANTOU() { /** 重複チェックしながら乱数作成 */ for(i = min; i <= max; i++){ while(true){ var tmp = intRandom(min, max); if(!randoms.includes(tmp)){ randoms.push(tmp); break; } } } /** 乱数配列を使用 */ var row = randoms[0]; var Name = sheetdata[row][0]; var slackApp = SlackApp.create(slack["token"]); /** messageを送信するロジック */ var Message = slackApp.postMessage(slack["ChannelId"], "testtest" + "\n本日の担当者は…" + Name + "さんです!", {username : slack["userName"]}); Logger.log(Message); }
知りたいこと
現在は乱数配列の先頭のみをトリガーで実行するたびに使用しているのですが
実際には、トリガーで実行するたびに配列の先頭から順に
1回目はrandoms[0]
、2回目にまたトリガーで実行されると次はrandoms[1]
と取得し、
// 配列 randoms => [1.0, 2.0, 5.0, 6.0, 4.0, 3.0]だった場合 message1回目 本日の担当者は…テスト一郎さんです! //randoms[0] message2回目 本日の担当者は…テスト二郎さんです! //randoms[1] //次はテスト五郎が担当となる
その上で配列が空になれば、また新たに乱数配列を作成してまた先頭から順に...という実装にしたいのですが
どのようにすれば良いか手が詰まってしまい、
アドバイスなどご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/17 09:15