Best way to convert an array of objects to an object?

I need to convert an array of objects to an object. I did with the logic below. Is there a better way to handle this?

fiddler version

var before = [{ "x": ["2015-10-14T01:59:59.999+05:30", "2015-10-14T03:59:59.998+05:30", "2015-10-14T05:59:59.997+05:30", "2015-10-14T07:59:59.996+05:30", "2015-10-14T09:59:59.995+05:30", "2015-10-14T11:59:59.994+05:30", "2015-10-14T13:59:59.993+05:30", "2015-10-14T15:59:59.992+05:30", "2015-10-14T17:59:59.991+05:30", "2015-10-14T19:59:59.990+05:30", "2015-10-14T21:59:59.989+05:30", "2015-10-14T23:59:59.988+05:30"] }, { "CleanCoal": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Middelings": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Prime": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "SpiralProd": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }]; var after = {}; for (var i = 0; i < before.length; i++) { var keys = Object.keys(before[i]); after[keys] = before[i][keys]; } console.log(after) document.writeln(JSON.stringify(after)) 
+7
javascript arrays
source share
5 answers

You can use forEach to iterate over an array, and you forgot to iterate over a nested array if there are several elements inside an object.

So this code will not work for

 var arr = [{'a': 'b', 'c': 'd'}]; 

Demo

 var before = [{ "x": ["2015-10-14T01:59:59.999+05:30", "2015-10-14T03:59:59.998+05:30", "2015-10-14T05:59:59.997+05:30", "2015-10-14T07:59:59.996+05:30", "2015-10-14T09:59:59.995+05:30", "2015-10-14T11:59:59.994+05:30", "2015-10-14T13:59:59.993+05:30", "2015-10-14T15:59:59.992+05:30", "2015-10-14T17:59:59.991+05:30", "2015-10-14T19:59:59.990+05:30", "2015-10-14T21:59:59.989+05:30", "2015-10-14T23:59:59.988+05:30"] }, { "CleanCoal": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Middelings": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Prime": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "SpiralProd": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }]; var after = {}; before.forEach(function(obj) { // obj here is the element of the array, ie object // Looping over all the keys of the object Object.keys(obj).forEach(function(key) { // key here is the key of the object after[key] = obj[key]; }); }); console.log(after); document.writeln('<pre>' + JSON.stringify(after, 0, 2) + '</pre>'); 
+6
source share

We use the best functional programming in JavaScript:

Using reduce , we do not need to add temporary variables to the outer area.

for (var i in obj) usually faster than Obj.keys(obj).forEach : https://jsperf.com/for-in-versus-object-keys-foreach

 var before = [{ "x": ["2015-10-14T01:59:59.999+05:30", "2015-10-14T03:59:59.998+05:30", "2015-10-14T05:59:59.997+05:30", "2015-10-14T07:59:59.996+05:30", "2015-10-14T09:59:59.995+05:30", "2015-10-14T11:59:59.994+05:30", "2015-10-14T13:59:59.993+05:30", "2015-10-14T15:59:59.992+05:30", "2015-10-14T17:59:59.991+05:30", "2015-10-14T19:59:59.990+05:30", "2015-10-14T21:59:59.989+05:30", "2015-10-14T23:59:59.988+05:30"] }, { "CleanCoal": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Middelings": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Prime": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "SpiralProd": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }]; var after = before.reduce(function(dst, src){ // import every key: val in src into dst // and keep doing it for every element in the array. for (var key in src) if ({}.hasOwnProperty.call(src, key)) dst[key] = src[key]; return dst; }, {}); // start with an empty object to avoid modifying items in before array. document.writeln("<pre>" + JSON.stringify(after, null, 4) + "</pre>") 
+3
source share

In recent browsers [ecmascript 5] we have reduce , which returns an object

try below

 var before = [{"x":["2015-10-14T01:59:59.999+05:30","2015-10-14T03:59:59.998+05:30","2015-10-14T05:59:59.997+05:30","2015-10-14T07:59:59.996+05:30","2015-10-14T09:59:59.995+05:30","2015-10-14T11:59:59.994+05:30","2015-10-14T13:59:59.993+05:30","2015-10-14T15:59:59.992+05:30","2015-10-14T17:59:59.991+05:30","2015-10-14T19:59:59.990+05:30","2015-10-14T21:59:59.989+05:30","2015-10-14T23:59:59.988+05:30"]},{"CleanCoal":["0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00"]},{"Middelings":["0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00"]},{"Prime":["0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00"]},{"SpiralProd":["0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00"]}]; var object = before.reduce(function(o, v, i) { o[i] = v; return o; }, {}); console.log(object); 

The riddle is here http://jsfiddle.net/pscytrgj/

+3
source share

You can do this via JSON.stringify()

 var before = [{ "x": ["1", "2"], y: { a: 3 } }, { "CleanCoal": ["0.00", "0.00"], b: 4 }, { "Middelings": ["0.00", "0.00"] }, { "Prime": ["0.00", "0.00", "0.00"] }, { "SpiralProd": ["0.00", "0.00", "0.00"] }]; var after = {}; var b = "", i = -1; while (before[++i]) { var str = JSON.stringify(before[i]); b += str.slice(1, str.length - 1); if (before[i + 1]) b += ","; } after = JSON.parse("{" + b + "}"); console.log(after); document.write("<pre>" + JSON.stringify(after, 0, 3) + "</pre>") 
+2
source share

What about Object.assign?

 var before = [{ "x": ["2015-10-14T01:59:59.999+05:30", "2015-10-14T03:59:59.998+05:30", "2015-10-14T05:59:59.997+05:30", "2015-10-14T07:59:59.996+05:30", "2015-10-14T09:59:59.995+05:30", "2015-10-14T11:59:59.994+05:30", "2015-10-14T13:59:59.993+05:30", "2015-10-14T15:59:59.992+05:30", "2015-10-14T17:59:59.991+05:30", "2015-10-14T19:59:59.990+05:30", "2015-10-14T21:59:59.989+05:30", "2015-10-14T23:59:59.988+05:30"] }, { "CleanCoal": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Middelings": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "Prime": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }, { "SpiralProd": ["0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00", "0.00"] }]; var after = {}; before.map(function(i){ return Object.assign(after,i); }) console.log(after) document.writeln(JSON.stringify(after)) 
+1
source share

All Articles