一意の値に集約する / 重複排除(javascript)

様々な値を持つ配列をユニークな値にグループ化したいことってありますよね。
そういう場合はSetオブジェクトを利用します。

let strArr = ['hoge', 'fuga', 'piyo', 'hoge'];

let uniqSet = new Set();
strArr.forEach(item=> uniqSet.add(item));
let newArray = Array.from(uniqSet); //必要ならArrayに戻す

Setオブジェクトは値でもオブジェクトでも何でも格納できますが、重複する値は格納できません。これを利用して配列を一旦全てSetオブジェクトに渡し、再度Arrayに変換します。
Setオブジェクトのままでもイテレーションできるので再変換しなくても問題ないケースが多いです。

ワンライナーで書くならreduceを使って以下のような感じでしょうか。
個人的にはreduceってパッと見で理解できないのであんまり多用したくありません。

let uniqSet = strArr.reduce((set, item) => set.add(item), new Set());
Set
Set オブジェクトは、プリミティブ値やオブジェクト参照を問わず、あらゆる型で一意の値を格納できます。

コメント