How to convert a hash to a single object in JavaSc

2020-04-18 06:09发布

问题:

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?

回答1:

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);



回答2:

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} )))


回答3:

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)



回答4:

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);



回答5:

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...;.