はじめに
この記事では、二次元配列で特定の列(にあたる値・要素)を削除する方法をお伝えします。
記事内では内容を頭の中でイメージをしやすいように、二次元配列をSpreadsheetに保存した(setValues)場合を含めてご紹介します。
注意点:
本記事はGoogle Apps Scriptにおける二次元配列の操作についての記事であり、Spreadsheetの列操作(列の削除など)の記事ではない点に注意してください。
また、特定の列(配列番号)を指定する方法での削除を紹介するため、配列操作における”配列の最初の要素を削除するメソッド shift() ” や “配列の最後の要素を削除するメソッド pop()“の使い方は説明しません。
ゴールイメージ
削除前
var beforeArray = [["00", "01", "02", "03", "04", "05" ],
["10", "11", "12", "13", "14", "15" ],
["20", "21", "22", "23", "24", "25" ],
["30", "31", "32", "33", "34", "35" ],
["40", "41", "42", "43", "44", "45" ],
["50", "51", "52", "53", "54", "55" ]];
*赤色マーカー部分を削除します。
削除後
var afterArray = [["00", "01", "02", "04", "05" ],
["10", "11", "12", "14", "15" ],
["20", "21", "22", "24", "25" ],
["30", "31", "32", "34", "35" ],
["40", "41", "42", "44", "45" ],
["50", "51", "52", "54", "55" ]];
*削除後、黄色マーカー部分の配列が移動します。
実装方法とそのポイント
実装のポイント
削除したい要素の”配列番号”を指定する。
“配列番号をいかに取得するか” が実装のポイントの1つ目です。今回は、指定の配列番号を固定して紹介していますが、実務では複数の特定列を指定するケースがあります。ご参考に、配列番号を取得する際に参考となるメソッドは、indexOf() や lastIndexOf() などがあります。
特定の配列番号の要素を削除するメソッドは、「splice()」を使用する。
特定の配列番号の要素を削除するために、spliceのメソッドを使用します。ご参考に配列の最初は shift()、配列の最後は pop()などのメソッドがあります。
splice() メソッドの使い方
var beforeArray = ["00", "01", "02", "03", "04", "05"]; ← 赤色マーカー部分を削除する
//"03" の配列番号は 3 である。
var afterArray = beforeArray.splice(3, 1);
//output → console.log(afterArray) ["00", "01", "02", "04", "05"];
// 第一引数: start 3 は 削除したい配列番号を指定する。
//第二引数: deleteCount 1 は 第一引数の値から何個の値を削除するか指定する。
//第三引数: item は 省略可能で、省略した場合は要素の削除となる。
//なお、引数を指定した場合は該当の要素を指定した引数に置き換える。
参考:MDM Web Docs splice() メソッド
実装コード
先述のとおりですが、列の削除前の二次元配列です。
var beforeArray = [["00", "01", "02", "03", "04", "05" ],
["10", "11", "12", "13", "14", "15" ],
["20", "21", "22", "23", "24", "25" ],
["30", "31", "32", "33", "34", "35" ],
["40", "41", "42", "43", "44", "45" ],
["50", "51", "52", "53", "54", "55" ]];
二次元配列の削除の実装例のコードをこちら。
//実行コード
var afterArray = beforeArray.map(function(x) {
return x.splice(3, 1)
});
//console.log(afterArray);
//[["00", "01", "02", "04", "05" ],
//["10", "11", "12", "14", "15" ],
//["20", "21", "22", "24", "25" ],
//["30", "31", "32", "34", "35" ],
//["40", "41", "42", "44", "45" ],
//["50", "51", "52", "54", "55" ]];
応用編: 複数の特定の列(要素)を削除する方法
注意点
二次元配列の列にあたる要素を複数削除する場合、削除の都度、削除した要素より後ろにある要素の配列番号が減少する点です。これは、splice() メソッドは破壊的メソッドであるためです。例えば、下記のコードの黄色部分に注目するとわかりやすいので紹介します。
//実行コード
var afterArray = beforeArray.map(function(x) {
return x.splice(3, 1)
});
//console.log(beforeArray);
//[["00", "01", "02", "04", "05" ],
//["10", "11", "12", "14", "15" ],
//["20", "21", "22", "24", "25" ],
//["30", "31", "32", "34", "35" ],
//["40", "41", "42", "44", "45" ],
//["50", "51", "52", "54", "55" ]];
→ beforeArray と afterArray は同じ配列となる。
削除前は、04 や 14 の配列番号は「4」、 05 や 15 の配列番号は「5」であることに対して、削除後は、 04 や 14 の配列番号は「3」、 05 や 15 の配列番号は「4」となります。複数の列を削除する場合は注意してください。
実装コード
// 削除したい列の配列番号を配列で指定する。
var deleteArray = [3, 4];
// 赤色部分が削除したい列。
var beforeArray = [["00", "01", "02", "03", "04", "05" ],
["10", "11", "12", "13", "14", "15" ],
["20", "21", "22", "23", "24", "25" ],
["30", "31", "32", "33", "34", "35" ],
["40", "41", "42", "43", "44", "45" ],
["50", "51", "52", "53", "54", "55" ]];
//二次元配列の列(要素)の削除の処理
for(var i = 0; i < deleteArray.length; i++ ) {
// 削除の都度、配列番号を減少させる。
var deleteIndex = deleteArray[i] - i;
//配列要素の削除の処理を実施する。
var afterArray = beforeArray.map(function(x) {
return x.splice(deleteIndex, 1)
});
}
console.log(afterArray);
//[["00", "01", "02", "05" ],
//["10", "11", "12", "15" ],
//["20", "21", "22", "25" ],
//["30", "31", "32", "35" ],
//["40", "41", "42", "45" ],
//["50", "51", "52", "55" ]];
コメント