【GAS】spliceメソッドで配列要素を削除・分割する
この記事では、Google Apps Script(GAS)で配列の要素を削除(分割)する方法をご紹介します。
文字列の分割については下記の記事をご覧ください。
目次
配列の要素削除(分割)にはspliceメソッドを使う
spliceメソッドの基本構文
Array.splice(from [, num] [, val1, val2, …])
- from(必須):分割対象の配列のインデックス(例:最初の要素を分割したければ「0」を指定)
※配列インデックスより大きい数が指定されたらspliceメソッドは機能しない。また、指定が負の値だった場合は配列の末尾から先頭に向かってカウントされる。 - num(任意):分割対象となるスタート位置からの要素数
※指定されないか配列インデックスより大きい数が指定された場合、スタート位置からの末尾までのすべての要素を分割対象に含める。また、指定が0または負の値だった場合は分割されない。 - valN(任意):配列に追加する要素
- 戻り値:分割した配列(または値)
//先頭から1つの要素を分割
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.splice(0,1)); //[ 'cat' ]
console.log(animal); // [ 'dog', 'elephant', 'tiger', 'lion', 'monkey' ]
//先頭2番目から1つの要素を分割
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.splice(1,1)); //[ 'dog' ]
console.log(animal); // [ 'cat', 'elephant', 'tiger', 'lion', 'monkey' ]
//先頭2番目から2つの要素を分割
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.splice(1,2)); //[ 'dog', 'elephant' ]
console.log(animal); // [ 'cat', 'tiger', 'lion', 'monkey' ]
開始位置が配列の長さより大きい場合は削除(分割)されない
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.length); //6
console.log(animal.splice(7,2)); // []
開始位置が負の場合は末尾からカウントされる
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.splice(-4,3)); //[ 'elephant', 'tiger', 'lion' ]
要素数が指定されない、または配列の長さより大きい場合はすべて削除(分割)
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.splice(2,7)); // [ 'elephant', 'tiger', 'lion', 'monkey' ]
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.splice(2)); //[ 'elephant', 'tiger', 'lion', 'monkey' ]
要素数が0または負の値のは削除(分割)されない
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
console.log(animal.splice(2,-2)); //[]
spliceメソッドで複数配列へ分割する
上記の例ではそのままconsoleしましたが、spliceメソッドを使いながら新たな配列を定義・格納することで、もとの配列を任意の複数配列に分割できます。
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
let array_1 = animal.splice(0,2);
let array_2 = animal.splice(0,2);
let array_3 = animal.splice(0,2);
console.log(array_1); //[ 'cat', 'dog' ]
console.log(array_2); //[ 'elephant', 'tiger' ]
console.log(array_3); //[ 'lion', 'monkey' ]
spliceメソッドで二次元配列に変換する
任意の要素数を分割できるので、一次元配列から適当な要素ごとにネストして新たな二次元配列を作成することも容易です。
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
let animal_2 = [];
let numOfElements = 2;
for(let i = 0; 0 < animal.length; i){
animal_2.push(animal.splice(i, numOfElements));
}
console.log(animal_2); // [ [ 'cat', 'dog' ],[ 'elephant', 'tiger' ],[ 'lion', 'monkey' ] ]
要素を削除(分割)して新たな要素を追加する
引数に任意の個数の値を入れることで、要素の削除(分割)と同時に新たな要素を追加することが可能です。除外(分割)した位置に挿入されます。
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
let array = animal.splice(1,3, 'hippopotamus', 'eagle');
console.log(animal); //[ 'cat', 'hippopotamus', 'eagle', 'lion', 'monkey' ]
console.log(array); //[ 'dog', 'elephant', 'tiger' ]
もちろん追加するのは配列でもOKです。
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
let array = animal.splice(1,3, ['hippopotamus', 'eagle']);
console.log(animal); //[ 'cat', [ 'hippopotamus', 'eagle' ], 'lion', 'monkey' ]
console.log(array); //[ 'dog', 'elephant', 'tiger' ]
任意の位置に新たな要素を挿入する
削除(分割)の引数に0を入れた場合は削除(分割)が実行されない仕様でした。spliceメソッドの呼び出しがエラーになるわけではないので、挿入要素の引数はそのまま機能します。つまり、要素数の引数に0を入れて挿入用も指定することで、元の要素には影響を及ぼさずに任意の位置に新たな要素を追加することが可能です。
let animal = ['cat', 'dog', 'elephant', 'tiger', 'lion', 'monkey'];
let array = animal.splice(1,0, 'eagle');
console.log(animal); //[ 'cat', 'eagle', 'dog', 'elephant', 'tiger', 'lion', 'monkey' ]
console.log(array); //[]
まとめ
spliceメソッドを使った配列要素の削除(分割)についてご紹介しました。
おすすめ記事