I have been unable to figure out how to turn a nested array such as:
var array = [
[['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],
[['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],
['weight', 200], ['occupation', 'enforcement']]
];
into an object such as
var array = [
{firstName: 'Henry', codeName: 'Etta', email: 'henry@hardcore.net', weight: 180, occupation: 'repo'},
{firstName: 'Bruce', codeName: 'DK', email: 'IamB@man.com', weight: 200, occupation: 'enforcement'}
];
Below is what I've come up with so far, but it is clearly not producing the results I need.
function arrIntoObject(array) {
var obj = {};
array.map(function(a) {
a.map(function(e) {
obj[e[0]] = e[1];
});
});
return obj;
}
This seems like a question that would have been asked by now, but after hours I haven't been able to find a similar question, so I would appreciate any help or guidance here. Thanks!
You could just reduce the arrays into an object
var array = [ [['firstName', 'Henry'],['codeName', 'Etta'],['email', 'henry@hardcore.net'],['weight', 180],['occupation', 'repo']], [['firstName', 'Bruce'],['codeName', 'DK'],['email', 'IamB@man.com'],['weight', 200],['occupation', 'enforcement']] ]; var obj = array.map( arr => arr.reduce( (acc, curr) => { acc[ curr[0] ] = curr[1]; return acc; }, {})); console.log(obj)
.as-console-wrapper {top:0; max-height: 100%!important}
You can use map()
with spread syntax ...
and Object.assign()
var array = [[['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],[['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],['weight', 200], ['occupation', 'enforcement']]]; var result = array.map(e => Object.assign({}, ...e.map(([k, v]) => ({[k]: v})))) console.log(result)
You can also use map()
and then reduce()
with Object.assign()
var array = [[['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],[['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],['weight', 200], ['occupation', 'enforcement']]]; var result = array.map(e => e.reduce((r, [k, v]) => Object.assign(r, {[k]: v}),{})) console.log(result)
You can use a combination of .map()
with .reduce()
, like so:
var array = [ [['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']], [['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'], ['weight', 200], ['occupation', 'enforcement']] ]; var objs = array.map(function (arr) { return arr.reduce(function (res, curr) { var [key, value] = curr; res[key] = value; return res; }, {}); }); console.log(objs);
You can use the reduce
method, it permits to reduce an array to a single variable, in this case an object. For more informations give a look to MDN
var initialArray = [ [['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']], [['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'], ['weight', 200], ['occupation', 'enforcement']] ]; function arrayToObject(a) { return a.reduce(function (obj, keyValue) { obj[keyValue[0]] = keyValue[1]; return obj; }, {}); } var finalArray = initialArray.map(arrayToObject); console.log(finalArray);
Hope this simple logic might helps.
var array = [ [ ['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo'] ], [ ['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'], ['weight', 200], ['occupation', 'enforcement'] ] ]; var output = []; array.forEach(function(arr1) { output.push({}); arr1.forEach(function(arr2) { output[output.length - 1][arr2[0]] = arr2[1]; }) }); console.log(output);
array.map(val => val.reduce(function(obj, prop) {
obj[prop[0]] = prop[1];
return obj;
}, {}));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.