配列の操作をするArrayオブジェクト!
プログラムを作るのに必須の「配列」。配列を自在に操ることができればプログラムの幅がぐぐっと広がります!
そのためにも、GASには配列を取り扱うArrayオブジェクトというものが用意されていますので、今回はそれの紹介をしたいと思います!
次のサンプルでやっていきましょう!
Arrayオブジェクト
前述の通りArrayオブジェクトは配列を扱うオブジェクトです。
以下のようにnew演算子でインスタンスを作成することが出来ます
ただ、以前の記事でお伝えしたように配列リテラルで扱うほうが分かりやすいと思います。
Arrayオブジェクトのメソッドとプロパティ
Arrayオブジェクトには3種類のメソッドとプロパティがあります。
アクセサメソッド・・・配列自体は書き換えされず、戻り値を返す
変更メソッド・・・配列自体の内容を書き換える
反復メソッド・・・配列内の要素に対して処理を行う
分類 | メンバー | 説明 |
---|---|---|
アクセサメソッド | concat(value1[,…]) | 配列または、値value1,…を配列に連結する |
アクセサメソッド | join(sep) | 配列の全ての要素を文字列sepで結合した文字列を返す |
アクセサメソッド | slice(start[,end]) | 配列のstart+1番目からend+1番目の要素を抜き出す |
アクセサメソッド | toString() | 配列とその要素を表す文字列を返す |
アクセサメソッド | indexOf(element[,index]) | 配列の要素を前方から検索しelementとマッチしたインデックスを返す |
アクセサメソッド | lastindexOf(element[,index]) | 配列の要素を後方から検索しelementとマッチしたインデックスを返す |
変更メソッド | pop() | 配列から末尾の要素を抜き出す |
変更メソッド | push(element1[,…]) | 配列の末尾にelement1,…を追加する |
変更メソッド | reverse() | 配列の要素の順番を逆にする |
変更メソッド | shift() | 配列から先頭の要素を抜き出す |
変更メソッド | sort([fnc]) | 関数fncの定義に従って、配列の要素を並び替える(省略した場合は昇順になる) |
変更メソッド | splice(start,n[,element1,…) | 配列のstart+1番目の要素からn個の要素を削除し、element1,…で置き換える |
変更メソッド | unshift(element1[,…]) | 配列の先頭に要素を追加する |
反復メソッド | forEach(fnc) | 配列の各要素について関数fncを実行する |
反復メソッド | every(fnc) | 配列の全ての要素が関数fncを満たすかどうか判定する |
反復メソッド | some(fnc) | 配列の少なくとも1つの要素が関数fncを満たしているかどうか判定する |
反復メソッド | filter(fnc) | 配列要素のうち関数fncを満たす要素のみで新しい配列を生成する |
反復メソッド | map(fnc) | 配列の各要素についてfncを呼び出し、その結果を配列として返す |
反復メソッド | reduce(fnc) | 配列内の各要素について先頭から末尾に向かって関数fncを適用し一つの値にまとめる |
反復メソッド | reduceRight(fnc) | 配列内の各要素について末尾から先頭に向かって関数fncを適用し一つの値にまとめる |
プロパティ | length | 配列内の要素数 |
アクセサメソッド
サンプルコード
function test(){
// 配列を作る
var array = ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀"]
// toStringメソッド
Logger.log(array.toString()) // 織田信長,豊臣秀吉,黒田官兵衛,明智光秀
// joinメソッド
Logger.log(array.join("-")) // 織田信長-豊臣秀吉-黒田官兵衛-明智光秀
// concatメソッド
Logger.log(array.concat("伊達政宗")) // ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀", "伊達政宗"]
// sliceメソッド
Logger.log(array.slice(1, 3)) // [豊臣秀吉, 黒田官兵衛]
// indexOfメソッド
Logger.log(array.indexOf("豊臣秀吉")) // 1
// lastIndexOfメソッド
Logger.log(array.lastIndexOf("黒田官兵衛")) // 2
}
※indexOfメソッド・lastIndexOfメソッドは見つからない場合「-1」を返します。
変更メソッド
サンプルコード
function test(){
// 配列を作る
var array = ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀"]
// pushメソッド
array.push("伊達政宗")
Logger.log(array) // ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀", "伊達政宗"]
// unshiftメソッド
array.unshift("徳川家康")
Logger.log(array) // ["徳川家康", "織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀", "伊達政宗"]
// reverseメソッド
array.reverse()
Logger.log(array) // ["伊達政宗", "明智光秀", "黒田官兵衛", "豊臣秀吉", "織田信長", "徳川家康"]
// sortメソッド
array.sort()
Logger.log(array) // [伊達政宗, 徳川家康, 明智光秀, 織田信長, 豊臣秀吉, 黒田官兵衛]
// popメソッド
Logger.log(array.pop()) // 黒田官兵衛
Logger.log(array) // [伊達政宗, 徳川家康, 明智光秀, 織田信長, 豊臣秀吉]
// shiftメソッド
Logger.log(array.shift()) // 伊達政宗
Logger.log(array) // [徳川家康, 明智光秀, 織田信長, 豊臣秀吉]
// spliceメソッド
Logger.log(array.splice(2, 2, "徳川綱吉")) // [織田信長, 豊臣秀吉]
Logger.log(array) // [徳川家康, 明智光秀, 徳川綱吉]
}
spliceメソッドは引数の指定を工夫することで、置換・追加・削除といろいろな処理に使えます。
置換・・・上記のサンプル通り
追加・・・削除する要素数を「0」にする
削除・・・置換え後の要素を省略する
反復メソッド
反復メソッドは一覧にもあるように、いずれのメソッドも配列内の各要素について、指定の関数を呼び出して実行するという動作をするものになっています。
その呼び出す関数のことを“コールバック関数“と言い、これにはメソッドの種類によって決められた引数を指定する必要があります。
次のサンプルを御覧ください。forEachメソッドのサンプルです。
function test(){
// 配列を作る
var array_a = ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀" ]
// forEachメソッドで全ての要素にコールバック関数を実行する
array_a.forEach(function(value, index, array_b) {
Logger.log("%s番目の要素は%sさんです。", index, value)
})
}
まずは、forEachメソッドで配列array_aの要素を一つづつ取り出します。
取り出された要素は、コールバック関数(forEachの引数に指定されたfunction(){})に渡されます。
その時の引数は、最初の1つ目は「value:織田信長」「index:0」「array_b:array_a[0]」となりますね。
コールバック関数の中では、ログの出力の命令がありますので、命令どおりに実行します。
処理が終わると、次の要素への処理に移ります。
実行後、ログを確認すると、次のように表示されます。
0.0番目の要素は織田信長さんです。
1.0番目の要素は豊臣秀吉さんです。
2.0番目の要素は黒田官兵衛さんです。
3.0番目の要素は明智光秀さんです。
他の反復メソッドの動きもサンプルで確認してみましょう!
まずは、forEachメソッドと同じように、コールバック関数に
- 値
- インデックス
- 元の配列
を指定するメソッドです。
function test(){
// 配列を作る
var array_a = ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀" ]
// everyメソッド(全ての要素がコールバック関数のtrueかどうか)
var mojisuu3 = array_a.every(function(value, index, array_b){
return(value.length === 4)
})
Logger.log(mojisuu3) // false(黒田官兵衛がFalseなので)
// someメソッド(いずれかの要素がコールバック関数のtrueかどうか)
var mojisuu3 = array_a.some(function(value, index, array_b){
return(value.length === 4)
})
Logger.log(mojisuu3) // true(黒田官兵衛以外はtrueなので)
// filterメソッド(コールバック関数でtrueの要素を返す)
var array_c= array_a.filter(function(value, index, array_b){
return(value.length === 5)
})
Logger.log(array_c) // [黒田官兵衛]
// mapメソッド(コールバック関数の実行結果(戻り値)を配列で返す)
var array_c = array_a.map(function(value, index, array_b){
return(value.length === 5)
})
Logger.log(array_c) // [false, false, true, false]
}
次に、配列内の要素を先頭(末尾)から一つの値にまとめる動作をするreduceメソッドとreduceRightメソッドです。
コールバック関数には、次の引数を指定します。
- 前の値(または初期値)
- 現在の値
- インデックス
- 元の配列
function test(){
// 配列を作る
var array_a = ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀" ]
// reduceメソッド(配列の要素を先頭から一つの値にまとめる)
var res1 = array_a.reduce(function(str, value, index, array_b){
return(str + value)
})
Logger.log(res1) // 織田信長豊臣秀吉黒田官兵衛明智光秀
// reduceRightメソッド(配列の要素を末尾から一つの値にまとめる)
var res2 = array_a.reduceRight(function(str, value, index, array_b){
return(str + value)
})
Logger.log(res2) // 明智光秀黒田官兵衛豊臣秀吉織田信長
}
プロパティ
サンプルコード
function test(){
// 配列を作る
var array = ["織田信長", "豊臣秀吉", "黒田官兵衛", "明智光秀" ]
// lengthプロパティ
Logger.log(array.length) // 4
}
まとめ
配列を扱う、Arrayオブジェクトについて紹介しました!プログラムする上で使い所が沢山あるのでしっかりマスターしましょう!
コメント