I am having an array of object (rawData). Each object of this array represents a x-coordinate and y-coordinates of various series (i.e,rawData = [(xi,y1i,y2i,..yni)]). I want to convert it to convertedData, which is an array of the object where each object represents just one series (i.e, convertedData = [[(xi,y1i)], [(xi,y2i)]...[(xi,yni)]])
rawData = [{
x: 1,
y1:"1 y1 string",
y2:"1 y2 string",
y3:"1 y3 string",
yn:"1 yn string",
},{
x: 2,
y1:"2 y1 string",
y2:"2 y2 string",
y3:"2 y3 string",
yn:"2 yn string",
}];
convertedData = [
{
name:"y1",
data:[
[1,"1 y1 string"],
[2,"2 y1 string"],
]
},{
name:"y2",
data:[
[1,"1 y2 string"],
[2,"2 y2 string"],
]
},{
name:"y3",
data:[
[1,"1 y3 string"],
[2,"2 y3 string"],
]
},{
name:"yn",
data:[
[1,"1 yn string"],
[2,"2 yn string"],
]
}
];
What is the Javascript way to cleanly attempt this?
Work done by me:
let convertedData = [];
rawData = [{
x: 1,
y1:"1 y1 string",
y2:"1 y2 string",
y3:"1 y3 string",
yn:"1 yn string",
},{
x: 2,
y1:"2 y1 string",
y2:"2 y2 string",
y3:"2 y3 string",
yn:"2 yn string",
}];
function findDataByName(convertedData, name){
for (let i=0; i<convertedData.length;++i){
if(convertedData[i].name === name)
return convertedData[i].data;
}
return temp;
}
function convert() {
/*initialize the convertedData*/
Object.keys(rawData[0]).forEach((value)=>{
if(value==='x') return;
convertedData.push({
name:value,//y1
data:[]//[(xi,y1i)]
})
});
/*now loop over rawData and fill convertedData's data array*/
rawData.forEach((obj)=>{
Object.keys(obj).forEach((key)=>{
if(key==='x') return;
let data = findDataByName(convertedData,key);
data.push([obj['x'], obj[key]]);//pushing a new coordinate
});
})
}
convert();
console.log(convertedData);
dataarray inconvertedDataexampledatabasically an object array where each object represents one coordinate.1 y1 stringis basically (value of x coordinate, name of series, and just static "string")...they are string