ある条件でのループ内で、JSONで受け取った配列の値を1レコードずつ見ていくときに便利だったアクションについての覚書です。
検証のきっかけ
なんとなくこんな感じのフローを想定していました。
ちなみに配列Nの中身はこんなイメージです。↓
要はとあるWeb APIから複数のレコードを取得してきた値を取り出すためのループの外で更に別のループを回したかったのですが、上記のフローには以下の問題点があります。
自動生成されるApply to Eachがループの回数をおかしくする…!
それは「配列Nから日付列を取り出そうとするときに自動生成されるApply to Eachアクションを考慮していない」という点です。
Apply to Eachアクションが自動生成された場合、「以前の手順から出力を選択」というプロパティでは自動で配列Nの名前がセットされます。
これは配列Nの要素の数だけループ処理を行う、という意味になります。
👇Apply to Eachアクションについての詳細👇
つまり、上記のフローだと意図していない子ループが発生してしまうせいで指定日数×配列Nの要素の数ループが発生してしまうのです。
なので、何とかしてApply to Eachが意図していない箇所で自動生成されないように工夫をする必要があります。
「アレイ(配列)のフィルター処理」
ここで使用すると便利なアクションが「アレイ(配列)のフィルター処理」です。
アクション「アレイのフィルター処理」を追加すると下記のような設定画面が追加されるので、配列Nから取り出されるデータが1件になるように設定します。
「アレイのフィルター処理」を使用した結果のフローは下図のようになります。
不要なApply to eachの回避
ここで生成された値を更にfirst関数をかけるとフローの可読性が高まることもあると思います。
形式は配列でも取得する値が1つであることが明確である場合、わざわざ「Apply to each」アクションを使用すると- フローの保守性・可読性が低くなるので不便です。
その他の繰り返し処理作成時の注意点について
以下記事でループ処理のDo~Untilのループを抜ける条件について紹介しています。