Search code examples
javascripttypescriptlodash

Lodash - How to merge two arrays of objects based on key?


I'm trying to concat two arrays of objects with lodash. I have these two array and I use concat operator in this way:

 var array1 = [{ id: 1, name: 'doc1' }, { id: 2, name: 'doc2' }];
 var array2 = [{id:1, name:'doc1'}, {id:3, name:'doc3'}, {id:4, name:'doc4'}];

 var array3 = _.concat(array1, array2);

I would like an array like this

 [{id:1, name:'doc1'}, {id:2, name:'doc2'}, {id:3, name:'doc3'}, {id:4, name:'doc4'}]]

But with concat function I obtain an array like this:

  [{ id: 1, name: 'doc1' }, { id: 1, name: 'doc1' }, { id: 2, name: 'doc2' }, { id: 3, name: 'doc3' }, { id: 4, name: 'doc4' }]]

I want to avoid the repetition of an object with the same id...Which kind of operator can I use?


Solution

  • You can get the result using merge and keyBy lodash functions.

    var array1 = [{id:1, name:'doc1'}, {id:2, name:'doc2'}];
    var array2 = [{id:1, name:'doc1'}, {id:3, name:'doc3'}, {id:4, name:'doc4'}];
    
    var merged = _.merge(_.keyBy(array1, 'id'), _.keyBy(array2, 'id'));
    var values = _.values(merged);
    console.log(values);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>