JavaScript:オブジェクトの配列から重複を取り除く関数
April 20, 2022
配列の要素がプリミティブな値の場合、重複を取り除くには Set が便利です。
要素がオブジェクトの場合、Set ではなく Map を利用して重複を排除できます。
- Set - JavaScript | MDN
- Map - JavaScript | MDN
以下では Map を利用した重複排除の関数を例示します。
関数(TypeScript) #
TypeScript で記載しています。型定義があるのは引数部分のみですので、JavaScript として使いたい場合は引数部分の型を削除してください。
/** 指定されたキーを基準に重複を取り除いたオブジェクトの配列を返す。重複した場合は後に渡された要素が残る。 */
function deduplicateByKey<T extends object>(key: keyof T, ...args: T[]) {
return Array.from(new Map(args.map((v) => [v[key], v])).values());
}
実行結果 #
const data1 = [
{ id: '111', name: 'Alice' },
{ id: '222', name: 'Bob' },
{ id: '333', name: 'Charlie' },
];
const data2 = [
{ id: '111', name: 'David' },
{ id: '222', name: 'Eve' },
];
const data3 = [
{ id: '111', name: 'Frank' },
{ id: '444', name: 'Grace' },
];
const result = deduplicateByKey('id', ...data1, ...data2, ...data3);
// result
[
{
id: '111',
name: 'Frank',
},
{
id: '222',
name: 'Eve',
},
{
id: '333',
name: 'Charlie',
},
{
id: '444',
name: 'Grace',
},
];