Search code examples
javascriptunderscore.jslodash

javascript array-object convert one key, array value single object


I have an object like this:

[ 
    { "number": 12, "string": "hi"},
    { "number": 40, "string": "bye"}
] 

I want:

{"number": [12, 40], "string": ["hi", "bye"]}

Or:

{"number": "12,40", "string": "hi,bye"}

Solution

  • You can use Array.prototype.reduce():

    The reduce() method executes a reducer function (that you provide) on each member of the array resulting in a single output value.

    Solution With Concatenated String:

    var data = [ 
        { "number": 12, "string": "hi"},
        { "number": 40, "string": "bye"}
    ] 
    data = data.reduce((a,c)=>{
      a.number = a.number + ',' +c.number;
      a.string = a.string + ',' +c.string;
      return a;
    });
    console.log(data);

    Solution With Array:

    var data = [ 
        { "number": 12, "string": "hi"},
        { "number": 40, "string": "bye"}
    ]
    
    data = data.reduce((a,c)=>{
      a.number.push(c.number);
      a.string.push(c.string);
      return a;
    }, {number:[],string:[]});
    console.log(data);