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

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

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

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

JavaScript

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

2584閲覧

JavaScript(GAS)で、配列Aの値が連想配列Bのキー名と一致した時、該当するキーに対応する値を取り出したい

YutaEmoto

総合スコア14

Google Apps Script

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

JavaScript

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/05/19 15:43

編集2019/05/19 16:25

分かりづらいタイトルで申し訳ありません。。
SlackとGASを連動させて、複数ユーザーのGoogleカレンダーでの予定を作成するbotを作っています。
望んでいる動作としては、
①SlackからメンションがついたユーザーたちのIDをスプレッドシートに貼り付け、そのIDが格納された配列をAとする。
例えば

JavaScript

1var ArrayA = ["ID1","ID2","ID3","ID4"];

という配列ができたとします。

②ユーザーIDをキーとして、値に対応するメールアドレスをおいた連想配列Bから、配列AのIDに対応するアドレスを取り出したい

JavaScript

1var ArrayB = { 2ID1:"aa@gmail.com", 3ID2:"bb@gmail.com", 4ID3:"cc@gmail.com", 5ID4:"dd@gmail.com", 6ID5:"ee@gmail.com", 7ID6:"ff@gmail.com" 8};

という連想配列があった時に、配列Aに格納されているのはID1〜ID4なので、連想配列から取り出したい値としてはaa〜dd@gmail.comになります。

このような動作を望む場合、どのようなコードを書けばよいのでしょうか、、?

初学なもので、大変分かりづらい質問となってしまい大変恐縮ですが、お知恵をお貸しいただきたいです。。。

※追記
こちらが書いてみたコードです(といっても詰まってしまって途中で書けなくなってしまいました。。)

JavaScript

1var ArrayLength = ArrayB.length; /*for文でArrayBの要素数だけ繰り返すために取得*/ 2var lastRow = sht.getLastRow();  3var lastCol = sht.getLastColumn(); 4var ArrayA = sht.getRange(lastRow,6,1,lastCol).getValues(); /*Slackから送られてきたユーザーID*/ 5 6 /*ArrayBに格納されているキーのうち、ArrayAの値と一致するものを取得したかったが、やり方がわからず、、*/ 7for (i = 0, i <= ArrayLength, i ++){ 8 if{ ArrayB[i] == ArrayA[i] /*ここまで書いて、条件式が明らかに違うと分かり、詰まってしまいました*/ 9 10 } 11 }

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

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

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

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

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

kei344

2019/05/19 15:57

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
YutaEmoto

2019/05/19 16:28

ありがとうございます。 記載したコードをのせてみましたが、具体的にはタイトルにあるような動作を望んでいます。 ただ、初学なもので大変恐縮ですが、そもそも望んでいるような動作が可能かどうかも判断がついていない状態です。。。
guest

回答2

0

ベストアンサー

forif の使い方が間違っているので、そのあたり基本の文法については入門書などを確認してみてください。

js

1var ArrayA = ["ID1","ID2","ID3","ID4"]; 2var ArrayB = { 3ID1:"aa@gmail.com", 4ID2:"bb@gmail.com", 5ID3:"cc@gmail.com", 6ID4:"dd@gmail.com", 7ID5:"ee@gmail.com", 8ID6:"ff@gmail.com" 9}; 10var i; 11var ArrayLength = ArrayA.length; // ID の数 12 13for ( i = 0; i < ArrayLength; i++ ) { 14 if ( ArrayB[ ArrayA[ i ] ] ) { 15 console.log( ArrayB[ ArrayA[i] ] ); 16 } 17} 18```**動くサンプル:**[https://jsfiddle.net/y2uzvpjw/](https://jsfiddle.net/y2uzvpjw/) 19 20--- 21 22【ループと反復処理 - JavaScript | MDN23[https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for_statement](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for_statement) 24 25if...else - JavaScript | MDN26[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/if...else#Syntax](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/if...else#Syntax)

投稿2019/05/19 16:47

kei344

総合スコア69416

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

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

YutaEmoto

2019/05/20 08:06

ありがとうございます。付け焼き刃の知識でこのようなことに取り組もうと思ってしまったので、初歩的な部分でのミスが目立ってしまいました。 また、解説も添付していただきありがとうございます。一からしっかり勉強しなおします。
guest

0

javascript

1const whatuwant = ArrayA.map(function(e){return ArrayB[e];});

ArrayBはobjectであってArrayではないですし、そもそとAとかBとかいう変数名は意味不明なので命名は適切に

投稿2019/05/19 22:12

papinianus

総合スコア12705

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

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

YutaEmoto

2019/05/20 08:04

ありがとうございます。 配列名は質問の際に簡素化しようと思い記入したのですが、かえってわかりづらくなってしまいました。 申し訳ございません。 ご指摘、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問