thefreeline
thefreeline

Reputation: 631

Javascript - Restructure array of objects

I currently have an array of objects that looks like this:

[
    {
        "key":"CES0000000001",
        "25568.95655":"29923",
        "25568.96078":"31603"
    },
    {
        "key":"CES0000000001",
        "25568.96501":"34480",
        "25568.96924":"38347"
    }
]

I'm trying to figure out the best way to restructure this data to look like this:

[
    {
        "key":"CES0000000002",
        "values": [ [ 25568.95655 , 29923 ] , [ 25568.96078 , 31603 ] ]
    },

    {
        "key":"CES0000000002",
        "values": [ [ 25568.96501 , 34480 ] , [ 25568.96924 , 38347 ] ]
    }
]

Can anyone provide some advice for this and any good resources for restructuring javascript objects? I'm getting more into visualization using d3.js and data formatting is key.

Upvotes: 1

Views: 5767

Answers (2)

DeWarner
DeWarner

Reputation: 21

This is an old post I see, but I want to share how you could do this with es6 object destructuring and restructuring. if you have an object...

const obj1 = {
    "key":"CES0000000001",
    "25568.95655":"29923",
    "25568.96078":"31603"
};

you could have:

const restructure = ({key, ...values}) => ({key, Object.entries(values)});
const obj2 = restructure(obj1);

or for the array you could restructure all of them with:

const b = arr.map(({key, ...values}) => ({key, Object.entries(values)}));

or if you are reusing the function...

const b = arr.map(restructure);

Upvotes: 2

iSchluff
iSchluff

Reputation: 465

my solution would be

    var arr= [
    {
        "key":"CES0000000001",
        "25568.95655":"29923",
        "25568.96078":"31603"
    },
    {
        "25568.96501":"34480",
        "25568.96924":"38347"
    }
];

var transformed= arr.map(function(obj){
    var result= {
        key: obj.key,
        values: []
    }

    for (var key in obj) {
      if (obj.hasOwnProperty(key) && key !== "key") {
          result.values.push([key, obj[key]]);
      }
    }
    return result;
});

console.log(transformed);

Upvotes: 6

Related Questions