0

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));
ROOT
  • 11,363
  • 5
  • 30
  • 45
blabbath
  • 442
  • 7
  • 27

0 Answers0