Ayesha
Ayesha

Reputation: 905

Convert the javascript object into different format

Please forgive me for not knowing how to do this. I guess we have to use a map function or so but i am not getting it.

Here is my object 'data'.

data
 [0]:
    name: 'Alex'
    sex: 'Male'
    new_joinee: false
 [1]:
    name: 'Anna'
    sex: 'female'
    new_joinee: true
 [2]:
    name: 'lester'
    sex: 'Male'
    new_joinee: true

I want to convert the above object into this form

data
name: 'Alex', 'Anna', 'lester'
sex:  'Male', 'Female','Male'
new_joinee: false,true,true

Can someone let me know how to achieve this.

Upvotes: 0

Views: 195

Answers (4)

Adi Levin
Adi Levin

Reputation: 5243

//Input data
var data = [
  {name: 'Alex', sex: 'Male', new_joinee: false}, 
  {name: 'Anna', sex: 'female', new_joinee: true}, 
  {name: 'lester', sex: 'Male', new_joinee: true}
];

//Initialize the output object
out = {};
for(var k in data[0]) {
   out[k] = [];
}

//Collect data from all input objects
data.forEach(function(item){
   for(var k in item) {
     out[k].push(item[k]);
   }
});

results in:

out == 
{ name: [ 'Alex', 'Anna', 'lester' ],
  sex: [ 'Male', 'female', 'Male' ],
  new_joinee: [ false, true, true ] }

Upvotes: 2

Zohaib Ijaz
Zohaib Ijaz

Reputation: 22895

I am assuming your data is an array of objects

var data = parse(data)

function parse(data){
  var parsedData = { name: '', sex: '', new_joinee: ''};
  data.forEach(function(item){
    parsedData.names += item.name;
    parsedData.sex += item.sex;
    parsedData.new_joinee += item.new_joinee;

   });
 return parsedData;
}

Upvotes: 1

Belfordz
Belfordz

Reputation: 630

If you have underscore in your project:

var keys = _.keys(myObj)
var foo = {
  name: _.pick(myObj, 'name'),
  sex: _.pick(myObj, 'sex'),
  newJoinee:_.pick(myObj, 'new_joinee')
}

_.each(keys, function(key) { console.log(key + ' ' + foo[key].join(', ')) })

Upvotes: 1

Prashant
Prashant

Reputation: 8050

If this is your initial data:

var initialData = 
[
    {name: 'Alex', sex: 'Male', new_joinee: false}, 
    {name: 'Anna', sex: 'female', new_joinee: true}, 
    {name: 'lester', sex: 'Male', new_joinee: true}
];

You can transform the data to something else in the following way:

var transformed = {
    name: [],
    sex: [],
    new_joinee: []
};

initialData.forEach(function (element) {
    transformed.name.push(element.name);
    transformed.sex.push(element.sex);
    transformed.new_joinee.push(element.new_joinee);
});

Result

{
    name: ['Alex', 'Anna', 'lester'],
    sex: ['Male', 'female', 'Male'],
    new_joinee: [false, true, true]
}

Upvotes: 1

Related Questions