JS あるキーが重複したオブジェクトを取り除く

const a = [
  {
    name: 'Risa',
    age: 22,
  },
  {
    name: 'Ryu',
    age: 20,
  },
  {
    name: 'Risa',
    age: 22,
  },
];

このような配列がある。要素のオブジェクトの name の値が重複しているオブジェクトを1つ取り除きたい。

const mapped = new Map(a.map((_a) => [_a.name, _a]));

Mapインスタンスを作成。a.map((_a) => [_a.name, _a]) で name をキー、_aそのものを値として作成。

この時点で重複が取り除かれる。

// 作成されたMapインスタンス
{'Risa' => {…}, 'Ryu' => {…}}

次にこのインスタンスからイテレーターオブジェクトを作成する。要素が列挙される。

Map.prototype.values() - JavaScript | MDN

const iterator = mapped.values();

Array.fromでイテラブルなオブジェクトを配列に変更する。

Array.from() - JavaScript | MDN

const newArray = Array.from(iterator)

// [{name: 'Risa', age: 22}, {name: 'Ryu', age: 20}]