I need to transform an array in a certain manner but I don't understand how to do it. The order of the keys matters.
I need the data structure for d3's d3.stack() function.
I want to transform data into dataX.
data = [
{ name: A, year: 2001, value: 1 },
{ name: A, year: 2002, value: 2 },
{ name: A, year: 2003, value: 3 },
{ name: B, year: 2001, value: 4 },
{ name: B, year: 2002, value: 5 },
{ name: B, year: 2003, value: 6 }
];
dataX = [
{ name: A, 2001: 1, 2002: 2, 2003: 3 },
{ name: B, 2001: 4, 2002: 5, 2003: 6 }
];
function transformData(data) {
transformed = {};
data.forEach(function(item, index) {
if (item.name in transformed) {
transformedItem = transformed[item.name];
} else {
transformedItem = {};
transformedItem.name = item.name;
}
transformedItem[item.year] = item.value;
transformed[item.name] = transformedItem;
});
result = [];
for (item in transformed) result.push(transformed[item]);
return result;
}
console.log(transformData(data));