earthpg:GAS専門のプログラミングスクール

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

GASを使っていると配列の重複を無くしたい時があるんだけど、どうしたらいいんだろう?
猫男
猫男
catman
catman
そんな時は、catmanがGASでの配列2次元配列重複削除について教えてやろう。簡単だぞ!

配列の重複を削除する方法

まずは、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は重複を許さない特性を持っているため、変換するだけで重複が消える。

forEachとfilterで重複削除

GASでは、forEachfilterでも重複を削除することができる。


function removeDuplicatesWithFilter(arr) {
  return arr.filter((element, index) => arr.indexOf(element) === index);
}

const newArray = removeDuplicatesWithFilter(exampleArray);
Logger.log(newArray); // ['apple', 'banana', 'orange']

配列の先頭から順に比較し、初めて出現した要素だけを残す。

なるほど、これなら配列の重複削除が簡単にできそう!
猫男
猫男

2次元配列の重複を削除する方法

次に、GASでの2次元配列の重複削除だ。データの重複している行を消す手法を学べば、表計算に役立つぞ。

マップを使った重複削除

2次元配列における重複削除は、マップを使うと便利だ。


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を使うことで重複する行を排除することができる。

マップを使うと2次元配列でも簡単に重複が取り除けるのか!
猫男
猫男

GASでの重複削除の応用

これらの方法を駆使すれば、GASでの作業がはかどるはずだ。配列や2次元配列の操作はエラーの元にもなりやすいから、慎重にな。

catman
catman
これで君もGASマスターへの道を進む一歩が踏み出せたはずだ。挑戦あるのみだよ!

練習問題

次の配列と2次元配列の重複を削除するコードを書いてください。

  1. 配列:[3, 6, 3, 1, 2, 2, 5]
  2. 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で管理。見たことのあるキーを確認するだけで、重複を削除できる。効率的な手法だ。