Merge multiple objects inside the same array into one object

JavascriptArraysObject

Javascript Problem Overview


var arrObj = [{a:1, b:2},{c:3, d:4},{e:5, f:6}];

how can i merge this into one obj?

//mergedObj = {a:1, b:2, c:3, d:4, e:5, f:6}

Javascript Solutions


Solution 1 - Javascript

If your environment supports Object.assign, then you can do the same in a succinct way like this

const arrObj = [{a: 1, b: 2}, {c: 3, d: 4}, {e: 5, f: 6}];

console.log(arrObj.reduce(function(result, current) {
  return Object.assign(result, current);
}, {}));

// If you prefer arrow functions, you can make it a one-liner ;-)
console.log(arrObj.reduce(((r, c) => Object.assign(r, c)), {}));

// Thanks Spen from the comments. You can use the spread operator with assign
console.log(Object.assign({}, ...arrObj));


ES5 solution:

You can use Array.prototype.reduce like this

var resultObject = arrObj.reduce(function(result, currentObject) {
	for(var key in currentObject) {
		if (currentObject.hasOwnProperty(key)) {
			result[key] = currentObject[key];
		}
	}
	return result;
}, {});

console.log(resultObject);
# { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }

This solution, simply gathers all the keys and their values in every object in the result, which is finally returned to us as the result.

This check

if (currentObject.hasOwnProperty(key)) {

is necessary to make sure that we are not including all the inherited enumerable properties in the result.

Solution 2 - Javascript

You could use reduce for an elegant solution:

arrObj.reduce(function(acc, x) {
    for (var key in x) acc[key] = x[key];
    return acc;
}, {});

See MDN docs for reduce for more information.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionerror123456789View Question on Stackoverflow
Solution 1 - JavascriptthefourtheyeView Answer on Stackoverflow
Solution 2 - JavascripttckmnView Answer on Stackoverflow