Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 336
Szymon Toda Avatar asked Jun 30 '15 10:06

Szymon Toda


People also ask

How do you merge an array of objects into a single object?

assign() method to convert an array of objects to a single object. This merges each object into a single resultant object. The Object. assign() method also merges the properties of one or more objects into a single object.

How do you flatten an array of nested objects?

flat()” method is embedded in ES6 that enables you to “flatten” a nested JavaScript Array. This method returns a new array in which all of the elements of sub-arrays are concatenated according to the specified depth. Here, the “Array” object will invoke the “flat()” method while passing “depth” as an argument.

How do you combine arrays of objects?

To merge elements from one array to another, we must first iterate(loop) through all the array elements. In the loop, we will retrieve each element from an array and insert(using the array push() method) to another array.

Which method is used to convert nested arrays to object?

fromEntries() method was introduced, which converts an array of two-item arrays to an object—effectively the reverse of the . entries() method.


1 Answers

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.

like image 143
Benjamin Gruenbaum Avatar answered Sep 30 '22 15:09

Benjamin Gruenbaum