GASで簡単!配列と二次元配列の重複削除テクニック


GASで配列の重複を削除する方法
まずは、GASで配列の重複を削除する基本的な方法を紹介しよう。
Setを使った重複削除
GASでは、Setを使うと簡単に重複を削除できる。
function removeDuplicates(arr) {
return [...new Set(arr)];
}
const exampleArray = ['apple', 'banana', 'apple', 'orange'];
const uniqueArray = removeDuplicates(exampleArray);
Logger.log(uniqueArray); // ['apple', 'banana', 'orange']
ここで、Setは重複を許さない特性を持っているため、変換するだけで重複が消える。
つまり、
List(重複許す)
↓
Set(重複許さない)
↓
List(重複許す)
という処理をしてやると、Setにしたときに重複の要素が消滅してしまうわけさ。
日常生活に例えると、
「ダイエットして一度脂肪を落として、リバウンドして戻っても“あの時の脂肪”はない」
とも言えるな。
しかし、
「一度 Set にして削除した重複は復活しないが、同じような新しい値が追加される可能性はある」
とも言える。
forEachとfilterで重複削除
GASでは、forEachとfilterでも重複を削除できるぞ。
function removeDuplicatesWithFilter(arr) {
return arr.filter((element, index) => arr.indexOf(element) === index);
}
const newArray = removeDuplicatesWithFilter(exampleArray);
Logger.log(newArray); // ['apple', 'banana', 'orange']
arr.filter(...)
は、元の配列 arr の各要素に対して関数を実行し、true を返した要素だけを新しい配列に残す。
(element, index) => arr.indexOf(element) === index
arr.indexOf(element)
は、その要素が最初に登場した位置(インデックス)を返す。index
は、filter
の現在のループでのインデックス。
つまり:
arr.indexOf(element) === index
→ 「この要素が初めて登場した場所か?」 をチェックしていることになる。
初めて登場する位置と一致しているときだけ true
が返され、その要素だけが新しい配列に含まれるんだ。

GASで2次元配列の重複を削除する方法
GASでの2次元配列における重複削除は、Mapを使うと便利だ。
function uniqueRows(arr) {
const seen = new Map();
return arr.filter(row => {
const key = row.join(',');
return seen.has(key) ? false : seen.set(key, true);
});
}
const example2DArray = [
['apple', 1],
['banana', 2],
['apple', 1],
['orange', 3]
];
const unique2DArray = uniqueRows(example2DArray);
Logger.log(unique2DArray); // [['apple', 1], ['banana', 2], ['orange', 3]]
各行を文字列化し、それをキーとしてMapを使うことで重複する行を排除できる。
seen = new Map()
は、すでに出てきた行を記録するための変数。row.join(',')
により、配列の行(例:['apple', 1]
)を'apple,1'
のような文字列に変換。seen.has(key)
で、すでに出現した行かどうかを確認します。- 初めての行であれば
seen.set(key, true)
により記録し、true
を返してその行を残す。 - 重複している行は
false
を返すことで削除。

えっ、Mapを忘れてしまった?
それなら、GASのMapの使い方も復習してみよう。
練習問題
次の配列と2次元配列の重複を削除するコードを書いてください。
- 配列:[3, 6, 3, 1, 2, 2, 5]
- 2次元配列:[[‘car’, 2], [‘bike’, 1], [‘car’, 2], [‘bus’, 4]]
解答・解説
以下に、配列と2次元配列の重複を削除するGASのコードを示します。
function test() {
// 配列の重複削除
const array = [3, 6, 3, 1, 2, 2, 5];
const uniqueArray = [...new Set(array)];
Logger.log(uniqueArray); // [3, 6, 1, 2, 5]
// 2次元配列の重複削除
const array2D = [['car', 2], ['bike', 1], ['car', 2], ['bus', 4]];
const seen = new Map();
const uniqueArray2D = array2D.filter(row => {
const key = row.join(',');
return seen.has(key) ? false : seen.set(key, true);
});
Logger.log(uniqueArray2D); // [['car', 2], ['bike', 1], ['bus', 4]]
}
1. Setを使えば、一瞬で配列内の重複をなくせる。GASでの一行力技だ。
2. 2次元配列の重複は、各行を連結して文字列化したキーを使ってMapで管理。見たことのあるキーを確認するだけで、重複を削除できる。効率的な手法だ。