I am having an array of object in the below format:
var log=[
{
billkey:"Name",
billvalue:"ABC"
},
{
billkey:"Department",
billvalue:"Computer"
}];
which I want to convert in a single object like:
var log={
"Name":"ABC",
"Department":"Computer"
};
I've tried the following approach:
for(var i=0;i<log.length;++i){
pushToAry(log[i].billkey, log[i].billvalue);
}
function pushToAry(name, val) {
var obj = {};
obj[name] = val;
ary.push(obj);
}
But it will push a new object every time into the ary array, which results into:
var ary =[
0:{
"Name":"ABC"
},
1:{
"Department":"Computer"
}];
How could I convert this array of object into an object?
If you just want to use a loop, you can do it like this :
var log = [
{
billkey: "Name",
billvalue: "ABC"
},
{
billkey: "Department",
billvalue: "Computer"
}];
var result = {};
log.forEach(x => result[x.billkey] = x.billvalue);
console.log(result);
In ES6 this is quite clean:
let result = {};
for (let {billkey, billvalue} of log)
result[billkey] = billvalue;
or if you prefer "functional" style:
let result = Object.assign(...log.map(x => ( {[x.billkey]: x.billvalue} )))
You can use reduce()
to return object.
var log = [{
billkey: "Name",
billvalue: "ABC"
}, {
billkey: "Department",
billvalue: "Computer"
}];
var result = log.reduce((r, e) => (r[e.billkey] = e.billvalue, r), {});
console.log(result)
You can use Array.prototype.reduce
to reduce it to the required object - see demo below:
var log=[{billkey:"Name",billvalue:"ABC"},{ billkey:"Department",billvalue:"Computer"}];
var result = log.reduce(function(p,c){
p[c.billkey] = c.billvalue;
return p;
},{})
console.log(result);
var obj = {};
for (var i = 0; i < log.length; i++)
obj[log[i].billkey] = log[i].billvalue;
First, I prepare an empty object to store reult to. Then I go through the log and in every iteration, I extract the log record's key (log[i].billkey
) and value (log[i].billvalue
) and use it to add the new member to the result: obj[...key...] = ...value...;
.