質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1937閲覧

GASでグループ分けのslackアプリを作る

hosodaaaaa

総合スコア47

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/04/26 10:15

編集2020/04/27 06:15

前回javascriptで班分けプログラムを作成したのですが、それをSlackと連携させslush commandで出力したいと思いGAS
にコードを移し、slack上で出力してみたのですが、期待通りにならずハマってしまいました。

【前回URL】
https://teratail.com/questions/256462

// src function doPost() { const members = ['吉田','友近','井上','石田','手塚','大宮','宇都宮','佐藤','長根','近藤','山本']; const total = 3; const numberPerTeam = Math.floor(members.length / total); const moduloMembers = members.length % total; let results = ''; //修正箇所1 const s = members => { for (let i = members.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [members[i], members[j]] = [members[j], members[i]]; } return members; } for (let i = 0; i < total; i++) { results += s(members).splice( 0, numberPerTeam + ( i < moduloMembers )).join('\n') //修正箇所2 } let response = results; //修正箇所3 return ContentServic.creatTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON); } // output "#近藤\n山本\n宇都宮\n吉田" // 期待する出力結果 # 近藤 //リーダー 山本 //メンバー1 宇都宮 //メンバー2 吉田 //メンバー3 # 大宮 手塚 友近 佐藤 # 井上 長根 石田

outputのように一番最初の配列しか出力されないのですが、なぜこのような出力結果になってしまうのでしょうか。
教えていただきたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/04/26 10:38

> outputのように一番最初の配列しか出力されない doPost()の、for (let i = 0; i < total; i++) { のループ中、 return '#' + a と1回目のループでreturn してしまっています。total分回っていません。
hosodaaaaa

2020/04/26 11:47 編集

回答していただきありがとうございます。 > for (let i = 0; i < total; i++) { のループ中、 return '#' + a と1回目のループでreturn してしまっています for文の中でreturnを返す事自体が間違っているという理解でよろしいでしょうか? だとしたら、上記引用のループ処理を変数で持たせてループが終わったらreturnを返すような処理をすれば良いですかね。
dodox86

2020/04/26 11:52

for文中でreturnをしたらdoPost()が終わってしまうわけですから、そういうことになります。(修正してご自身で解決したら、自己解決で質問を閉じてもらえれば、と思います)
hosodaaaaa

2020/04/27 06:11

解決できました。 ありがとうございます。
guest

回答1

0

自己解決

上記ソースコードを正の記述に変更しました。

投稿2020/04/27 06:15

hosodaaaaa

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問