Search code examples
javascriptlodashflatten

Flatten array with objects into 1 object


Given input:

[{ a: 1 }, { b: 2 }, { c: 3 }]

How to return:

{ a: 1, b: 2, c: 3 }

For arrays it's not a problem with lodash but here we have array of objects.


Solution

  • Use Object.assign:

    let merged = Object.assign({}, ...arr); // ES6 (2015) syntax
    
    var merged = Object.assign.apply(Object, arr); // ES5 syntax
    

    Note that Object.assign is not yet implemented in many environment and you might need to polyfill it (either with core-js, another polyfill or using the polyfill on MDN).

    You mentioned lodash, so it's worth pointing out it comes with a _.assign function for this purpose that does the same thing:

     var merged = _.assign.apply(_, [{ a: 1 }, { b: 2 }, { c: 3 }]);
    

    But I really recommend the new standard library way.