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に指定。
なんか他にいい方法ありますかね。