そーす

I'm a programmer in Fukuoka. Please contact me saubre.app[at]gmail.com or Twitter DM.

オブジェクトの配列の重複削除

const merge = (newList, oldList, key) =>
  Object.values([...oldList, ...newList].reduce((a, b) => {
    a[b[key]] = b;
    return a;
  }, {}));

const l1 = [
{ id: '1', value: 'l1v1' },
{ id: '2', value: 'l1v2' },
{ id: '3', value: 'l1v3' },
];

const l2 = [
{ id: '2', value: 'l2v1' },
{ id: '4', value: 'l2v2' },
{ id: '5', value: 'l2v3' },
]

console.log(merge(l1, l2, 'id'));
0: {id: "1", value: "l1v1"}
1: {id: "2", value: "l1v2"}
2: {id: "3", value: "l1v3"}
3: {id: "4", value: "l2v2"}
4: {id: "5", value: "l2v3"}

重複があった場合は第一引数(new)の方を残す感じ。重複チェックしたいオブジェクトのキーをkeyに指定。

なんか他にいい方法ありますかね。