「Google Apps Script」で配列変数に入っているデータを並べ替えたくなりました。
パッと思いついたのは、「配列のデータをスプレッドシートに書き出して、シートの機能で並べ替える」ものでしたが、書き出さずにやる方法があれば簡単ですね。
と、いうわけで、スプレッドシートに書き出さず配列変数のデータを並べ替える方法をまとめました。
並べ替えはどうやって書けばいい?
「JavaScript」と同じく、「.sort」を使います。
並べ替えの結果は、戻り値ではなく、指定した配列変数内に直接反映されています。
構文はこちら↓
【配列変数名】.sort(【ソート順を定義した関数(オプション)】)
文字の並べ替えは?
下記のコードで辞書順に並べ替えられます。
function TextSort() {
var arr = ['c','b', 'a','d','e'];
arr.sort()
console.log(arr);
}
// ⇒ 結果 [ 'a', 'b', 'c', 'd', 'e' ]
数字を昇順で並べ替えるには?
数字の並べ替えには、引数に「ソート順を定義した関数」を指定します。
昇順は「a - b」と指定します。
function NumberSortInAscendingOrder() {
var arr = [10,50,30,20,40];
arr.sort((a, b) => {return a - b;} );
console.log(arr);
}
// ⇒ 結果 [ 10, 20, 30, 40, 50 ]
数字を降順で並べ替えるには?
降順は「b - a」と指定します。
function NumberSortInDescendingOrder() {
var arr = [10,50,30,20,40];
arr.sort((a, b) => {return b - a;} );
console.log(arr);
}
// ⇒ 結果 [ 50, 40, 30, 20, 10 ]
2次元配列の場合は?
「ソート順を定義した関数」を工夫します。
具体的には、キーとなる要素数を指定します。
配列内1番目の文字列を基準に昇順で並べ替えるには?
function TwoDimensionalArraySort() {
var arr = [['e',10],['c',50],['a',30],['d',20],['b',40]];
arr.sort((a, b) => {
if (a[0] > b[0]) {
return 1;
} else {
return -1;
}
});
console.log(arr);
}
// ⇒ 結果 [ [ 'a', 30 ], [ 'b', 40 ], [ 'c', 50 ], [ 'd', 20 ], [ 'e', 10 ] ]
配列内2番目の数字を基準に昇順で並べ替えるには?
function TwoDimensionalArraySort() {
var arr = [['e',10],['c',50],['a',30],['d',20],['b',40]];
arr.sort((a, b) => {return a[1] - b[1];} );
console.log(arr);
}
// ⇒ 結果 [ [ 'e', 10 ], [ 'd', 20 ], [ 'a', 30 ], [ 'b', 40 ], [ 'c', 50 ] ]
日付順に並べ替えるには?
まとめ
「Google Apps Script」の並べ替えは「JavaScript」の構文がそのまま使えます。
2次元配列もちょっとした工夫で簡単にできてしまって、びっくりです。