オブジェクト配列を特定キーの値でユニーク抽出する必要があったので調べてみたのですが、シンプルな記述が見あたらなかったので書いてみました。
-
Array.map
で値とオブジェクトのArrayイテレータを作り、 -
new Map(イテレータ)
で値でuniq化し、 -
Map.values()
で オブジェクトのイテレータを作り、 -
[...イテレータ]
でArrayにする
オブジェクトのc
キーの値でuniq処理する例:
const array = [
{ a: 0, b: 1, c: 2 },
{ a: 3, b: 4, c: 2 },
{ a: 5, b: 6, c: 7 },
{ a: 8, b: 9, c: 7 },
];
let uniq_by_c = [...new Map(array.map(obj => [obj.c, obj])).values()];
console.log(uniq_by_c);
関数化
const uniq = (array, key) => [...new Map(array.map(obj => [obj[key], obj])).values()];
console.log(uniq(array, 'c'));
実行結果
[ { a: 3, b: 4, c: 2 }, { a: 8, b: 9, c: 7 } ]