配列の各要素に対してループ処理を実行するには、GAS(その元となるjavascript)に備わっているループ処理構文(for)と、配列のメンバーとしてループ機能がある反復メソッド(forEach / map)があります。それぞれの構文と使い方を解説します。
Contents
for文
一番使用方法がわかりやすいのがfor文によるループ処理です。これは他のプログラミング言語でもほぼ用意されている構文です。
for(初期化条件; 条件式; 増減式) { // 条件式がtrurの間に実行される処理 }
GASではスプレッドシートを読み込み、配列としてfor文を回すことも多いですが、配列に繰り返し処理を実行する場合、条件で置いた変数をインデックスとして用いて各要素を呼び出すことが多いと思います。
リストの中身を1つずつprintする
// リストの中身を1つずるprintする function myFunction_() { let names = ['taro', 'jiro', 'saburo']; for (let i = 0; i < names.length; i++){ console.log(names[i]); } }
リストの中身を1つずつ取り出して置き換える
// リストの中身を1つずつ取り出して置き換える function myFunction() { let names = ['taro', 'jiro', 'saburo']; for (let i = 0; i < names.length; i++){ names[i] = names[i] + 'さん'; //各配列の要素に'さん'を付けて上書き } console.log(names);//[ 'taroさん', 'jiroさん', 'saburoさん' ] }
一定回数処理をループさせる
また単純にfor文を10回ループさせたい場合は以下のように記述します
function myFunction2() { for (let i = 0; i < 10; i++){ console.log(i); } }
配列と一緒に使うとループ処理が格段に便利になるfor文がfor inとfor of です。配列や文字列など、反復可能なオブジェクトに含まれるすべての要素に対して繰り返し処理を実行します。for文との違いとして、すべての要素に処理を実行するので条件式や増減式は不要です。
for of
for of 文 for(変数 of 反復可能オブジェクト){ //ループ内で実行する処理 }
for of文は、反復可能オブジェクトに含まれる要素を定められた順番通りに取り出しで反復処理を実行します。
要素と合わせてインデックス番号を取り出す
function myFunction3() { let names = ['taro', 'jiro', 'saburo']; for (let name of names){ console.log('index of',name, ':' ,names.indexOf(name)); } }
<実行結果>
情報 index of taro : 0
情報 index of jiro : 1
情報 index of saburo : 2
for in
for in for(変数 in 反復可能オブジェクト){ //ループ内で実行する処理 }
for in文は、反復可能オブジェクトに含まれるプロパティを順不同で取り出し、変数に格納してから反復処理を実行します。変数として取り出すのが要素ではなくプロパティ自身であること、順序が保証されていないことがfor of 文との大きな違いです。
要素と合わせてインデックス番号を取り出す
function myFunction4() { let names = ['taro', 'jiro', 'saburo']; for (let index in names){ console.log('index ', index, ':', names[index]); } }
<実行結果>
情報 index 0 : taro
情報 index 1 : jiro
情報 index 2 : saburo
forEachメソッド
配列の各要素に対して関数を実行するメソッドです。
Array.forEach(fnc)
fnc(必須):配列のすべての要素に逐次適応される関数
・value(必須):配列の各要素
・index(任意):各要素のインデックス
・array(任意):メソッドが呼び出された時の元の配列
戻り値:関数の実行結果
要素を1つずつ取り出してprintする
function myFunction6() { let names = ['taro', 'jiro', 'saburo']; function logname(value) { console.log(value); } names.forEach(logname); }
mapメソッド
Array.map(fnc)
fnc(必須):配列のすべての要素に逐次適応される関数
・value(必須):配列の各要素
・index(任意):各要素のインデックス
・array(任意):メソッドが呼び出された時の元の配列
戻り値:関数の実行結果を要素とした配列
要素を1つずつ取り出して処理したものを新しい配列として保存する
function myFunction7() { let names = ['taro', 'jiro', 'saburo']; //各要素の先頭に'a 'を加える関数 function append_name(value) { return value + 'さん'; } console.log(names.map(append_name)); }
forEachメソッドと同じような印象を持ちがちですが、各要素に対して関数の処理を実行するforEachメソッドに対して、mapメソッドは処理結果を新たな要素として配列に返すということなので結果が全然異なります。
break
for文の途中で処理を終了させたい場合はbreakと記載します
breakで処理を途中で終了する
function myFunction3() { let names = ['taro', 'jiro', 'saburo']; for (let name of names){ console.log('index of',name, ':' ,names.indexOf(name)); break; //1巡目で処理終了 } }
まとめ
GASにおいて、配列の各要素に対してループ処理を実行する手法(for文 / forEach / map)をご紹介しました。
コメント
[…] 関連記事:【GAS】for文で配列処理やループ処理を行うサンプルコード […]