【GAS】配列の重複を削除する
GASで配列の重複要素を削除する方法(ユニーク要素の配列にする方法)をご紹介します。
配列の重複を削除する方法
下記の関数を引数として対象の配列にfilterメソッドを適応すれば配列の重複を削除できます。
function eliminateDuplicate(x, i, array){
return array.indexOf(x) == i;
};
let lessons = ['Japanese', 'economics', 'math','science', 'music', 'math', 'economics' ];
console.log(lessons); // ['Japanese', 'economics', 'math','science', 'music', 'math', 'economics' ];
console.log(lessons.filter(eliminateDuplicate)); // [ 'Japanese', 'economics', 'math', 'science', 'music' ]
簡単な解説
重複削除用の関数で定義する
function fnc(x, i, array){}
- fnc:配列の各要素に反復処理する関数
- x:要素
- i:要素のインデックス番号
- array:元の配列
各要素に対して反復処理する関数を定義しています。filterメソッドの他、forEachメソッド、mapメソッド等も同様に関数を定義して適応できます。
indexOfメソッドで単一の要素となるように処理する
array.indexOf(x)
- 戻り値:xが一致する最も先頭のインデックス番号
indexOfメソッドの戻り値が「最も先頭のインデックス番号」であることがポイントです。
例えば、下記の配列の各要素を引数にindexOfメソッドを適応した際、第3要素(インデックス番号2)の「math」の戻り値は「2」、第6要素(インデックス番号5)の「math」の戻り値も「2」となります。
関数内ではインデックス番号とindexOfの戻り値が一致するかどうかの審議判定をしているため、第3要素(インデックス番号2)の「math」は真、第6要素(インデックス番号5)の「math」は偽が返ります。従って重複した要素があった場合、最も先頭の要素のみが真となるため重複が削除できるという機構になっています。
let lessons = ['Japanese', 'economics', 'math','science', 'music', 'math', 'economics' ];
要素が真か偽かどちらが判定されてるかは、mapメソッドを適応することで可視化できます。
function eliminateDuplicate(x, i, array){
return array.indexOf(x) == i;
};
console.log(lessons.map(eliminateDuplicate)); // [ true, true, true, true, true, false, false ]
おすすめ記事